PUROGU LADESU

ポエムがメインのブログです。

【Golang】 9 HTTP、JSON

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 }