0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoでURLからクエリパラメータを取得する方法

Posted at

GoでURLからクエリパラメータの値を取得する方法について、取り上げます!

http://localhost:8080/todos?size=3&prev_id=2
このようなURLからsizeとprev_idを取り出していく方法を見ていきましょう〜

全体のコード

func (h *TODOHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
		myUrl, _ := url.Parse(r.URL.String())
		log.Println(myUrl)
  
		params, _ := url.ParseQuery(myUrl.RawQuery)
		log.Println(params)
  
		size, err := strconv.ParseInt(params.Get("size"), 10, 64)
		if err != nil {
			http.Error(w, "invalid size parameter", http.StatusBadRequest)
			return
	}

では、順番に説明していきますね。

1. URLの分解

myUrl, _ := url.Parse(r.URL.String())

まず、文字列化したURLをurl.Parse()を用いて、URLを要素ごとに分解します。

2. クエリの取得(map型として)

params, _ := url.ParseQuery(myUrl.RawQuery)

次にURLの「?」以降のクエリ文字列部分を取得します。

RawQueryは生クエリを保持しており、string型です。
例えば、http://localhost:8080/todos?size=3&prev_id=2 というURLの場合、
myUrl.RawQueryはsize=3&prev_id=2となります。

url.ParseQueryはこのクエリ文字列(RawQuery) を解析し、キーと値のペアとしてマップに変換します(map[string][]stringの形式)。
上記の例の場合、map[prev_id:[2] size:[3]]がparams変数に代入されます。

3. 取得したクエリの値の型変換

size, err := strconv.ParseInt(params.Get("size"), 10, 64)

params.Get("size")で取得できるsizeクエリの値はstring型です。
そのため、strconv.ParseInt()を用いて、int64に型変換をします。

以上がURLからクエリパラメータを取得する処理になります。
場合によっては、3番の型変換は必要ないかもしれませんね。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?