1
0

Goのnet/httpではパスパラメータは取得できない!なので実装してみた

Last updated at Posted at 2024-01-08

net/httpでパスパラメータが取得できない件

GoでWebアプリやAPIを開発する時には、Goの標準パッケージであるnet/httpを使うことができる。

JavaやPythonなどの他の言語だと、WebフレームワークやAPI開発のフレームワークを使う必要がある一方で、Goではサードパーティーのライブラリを使う必要がないというのだから、それはそれは便利である。

しかし、net/httpを実際に使ってみて感じた最大のデメリットは、パスパラメータが取得できないということだ。

パスパラメータはアプリを開発するのであれば、99%取得する必要が出てくるだろう。これは困ったというのが事実だが、話は簡単。無いのであれば作ればいい。

そこで今回は、Goのnet/httpでパスパラメータを取得するための実装をしてみた。

※なお、クエリパラメータやボディパラメータ、さらにはHTTPメソッド(GETなのかPOSTなのかの情報)については、取得する機能が存在する。やり方は割愛するのでググっていただきたい。

パスパラメータを取得するコード

/item/{itemId} のようなエンドポイントで {itemId} 部分をパスパラメータとして抽出する簡単な例を以下に示す。

main.go

package main

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

func itemHandler(w http.ResponseWriter, r *http.Request) {
    // URLのPath部分を"/"で分割
    parts := strings.Split(r.URL.Path, "/")

    // 期待するパスが "/item/{itemId}" 形式であるため、
    // 配列の3番目の要素が itemId になる。
    // URLが /item/123 の場合、parts は ["", "item", "123"] になる。
    if len(parts) < 3 {
        http.Error(w, "Invalid request", http.StatusBadRequest)
        return
    }
    itemId := parts[2]

    // itemIdを使用した処理
    fmt.Fprintf(w, "Item ID: %s", itemId)
}

func main() {
    http.HandleFunc("/item/", itemHandler) // HandleFunc にパスを登録

    fmt.Println("Server is starting...")
    http.ListenAndServe(":8080", nil)
}

こう見ると比較的簡単に実装できると感じたのではないだろうか?いやいや、やっぱめんどくせえよって感じた方は、ここで離脱せずに次の章を見てほしい。

より便利なルーティング機能やパスパラメータの取得などを簡単に扱えるGoの外部ライブラリ 5選

パスパラメータを取得するのにセルフ実装は嫌だという場合は、net/httpの仕様を諦め、外部ライブラリを使用しよう。

見出しの通り、Go言語で人気のあるWebフレームワークおよびルーティングライブラリを5つ紹介する。

1. Gorilla Mux

Gorilla Muxは非常に人気があり、強力なURLルーターおよびディスパッチャー。パスパラメータ、正規表現ベースのルーティング、リバースルーティングなどの機能を提供している。

2. Gin

Ginは高性能なHTTP Webフレームワーク。ルーティング、ミドルウェア、JSONの解析などが簡単に行える。Ginはスピード重視のアプリで使える。

3. Echo

Echoは高性能なミニマリストWebフレームワーク。容易なルーティング、中間処理、テンプレートレンダリングなどが特徴。Echoもまた、API開発において人気の選択肢の一つ。

4. Chi

Chiは小さく、急速に人気を集めているHTTPルーター。Goの標準net/httpに近い設計思想を持っており、中間層やルートグループ、URLパラメータの取得などをシンプルかつ効果的に行える。

5. Fiber

FiberはExpress.jsに触発されたWebフレームワークで、Node.jsの開発者に馴染み深いAPI設計を持っている。使いやすさとパフォーマンスのバランスが取れていることが特徴。

1
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
1
0