http
endpointの作成
base, _ := url.Parse("http://example.com/ssss") reference, _ := url.Parse("/home?a=1&b=2") endpoint := base.ResolveReference(reference).String() fmt.Println(endpoint)
リクエストの作成
req, _ := http.NewRequest("GET", endpoint, nil) // req, _ := http.NewRequest("POST", endpoint, bytes.NewBuffer([]byte("password"))) req.Header.Add("Content-Type", "application/json") //ヘッダ追加 q := req.URL.Query() q.Add("user", "123") //パラメータ追加 fmt.Println(q.Encode())
JSON
JSONをstructに入れる
err := json.Unmarshal(b, &p)
structが大文字でも小文字でも入る。JSONは基本小文字みたい。
structをJSONに入れる。
v, _ := json.Marshal(p)
デフォルトではキーがstructと同じになってしまう。
jsonで扱う名前と型がstructと違う場合または使わないものなど、宣言の右に定義できる。
type Psn struct { Name string `json:"name"` Age int `json:"age,string"` //structにはintで入り、JSONはstringになる Items []string `json:"items,omitempty"` //からの場合キーも出力しない Sex string `json:"-"` //JSONに出力しない T *T }
Marshal、Unmarshalのカスタマイズ、勝手に置き換えられる
中でなにか文字を処理する、structを作ってそれに合わせるなど。
func (p *Psn) UnmarshalJSON(b byte) error { return err }
func (p Psn) MarshalJSON() (byte, error) { return v, err }