## ポイント - [[url.Values]]を使って[[query]]を[[URLエンコード]]された文字列にする - [[url.Values.Encode]]を使って[[map]]を[[query]]文字列に変換する - [[http.Post]]を使ってPOSTする - レスポンスの`StatusCode`でエラーハンドリングする - レスポンスは[[Go言語でJSON変換|JSONからstructへ変換]]する ```go type IClient interface { PostHoge(id string, name string, uri string) (*response.Root, error) } type Client struct { BaseUrl string } func NewClient(baseUrl string) IClient { return Client{ BaseUrl: baseUrl, } } func (c Client) PostHoge(id string, name string, uri string) (*response.Root, error) { uri := c.createUri("/hoge", url.Values{ id: []string{id}, name: []string{name}, }) form := url.Values{ "uri": []string{uri}, } body := strings.NewReader(form.Encode()) res, err := http.Post(uri, "application/json", body) if err != nil { // TODO: 例外処理 } if res.StatusCode >= 500 { // TODO: 例外処理 } if res.StatusCode >= 400 { // TODO: 例外処理 } var r response.Root if err := json.NewDecoder(res.Body).Decode(&r); err != nil { // TODO: 例外処理 } defer res.Body.Close() return &r, nil } func (c Client) createUri(path string, query url.Values) string { return fmt.Sprintf("%s%s?%s", c.BaseUrl, path, query.Encode()) } ``` ## MOC - [[Go言語でURLをパース]]