package cookie import ( "net/http" "strings" ) func Parse(str string) []*http.Cookie { header := http.Header{} header.Add("Cookie", str) request := http.Request{Header: header} return request.Cookies() } func ToString(cookies []*http.Cookie) string { if cookies == nil { return "" } cookieStrings := make([]string, len(cookies)) for i, cookie := range cookies { cookieStrings[i] = cookie.String() } return strings.Join(cookieStrings, ";") } func SetCookie(cookies []*http.Cookie, name, value string) []*http.Cookie { for i, cookie := range cookies { if cookie.Name == name { cookies[i].Value = value return cookies } } cookies = append(cookies, &http.Cookie{Name: name, Value: value}) return cookies } func GetCookie(cookies []*http.Cookie, name string) *http.Cookie { for _, cookie := range cookies { if cookie.Name == name { return cookie } } return nil } func SetStr(cookiesStr, name, value string) string { cookies := Parse(cookiesStr) cookies = SetCookie(cookies, name, value) return ToString(cookies) } func GetStr(cookiesStr, name string) string { cookies := Parse(cookiesStr) cookie := GetCookie(cookies, name) if cookie == nil { return "" } return cookie.Value }