okaryo.log

GoでクエリパラメータのあるGETリクエストを投げる | okaryo.log

GoでクエリパラメータのあるGETリクエストを投げる

    #Go

はじめに

Goのnet/httpパッケージを使ってクエリパラメータのあるGETリクエストを投げたかった際、?&をつなげてパラメータを作成するのは面倒なのでやりたくなかった。

良い方法はないかと公式のAPIドキュメントを見ていたらやはり良い方法があったのでまとめておく。

方法

URLを文字列をして扱うのではなく、net/urlのURLオブジェクトとして扱い、それによって利用できるQuery()にパラメータを追加していくというやり方だ。

package main

import (
  "fmt"
  "net/http"
  "net/url"
)

func main() {
  // URLオブジェクトを作成
  u, err := url.Parse("https://example.com/hoge")
  if err != nil {
    // handle error
  }

  // クエリパラメータを追加
  q := u.Query()
  q.Set("key1", "value1")
  q.Set("key2", "value2")
  u.RawQuery = q.Encode()

  // GETリクエストを送信
  res, err := http.Get(u.String())
  if err != nil {
    // handle error
  }
  defer res.Body.Close()
}

詳細

Query()からはValues型の値が返ってくるが、これは以下のように定義されたmapになる。

type Values map[string][]string

これに対してSet(key, value string)でパラメータを追加していき、エンコードしたものをクエリパラメータとしてURLオブジェクトに設定するという流れになる。

q.Set("key1", "value1")
q.Set("key2", "value2")
u.RawQuery = q.Encode()

参考


関連記事
最新記事
プロモーション

This site uses Google Analytics.