🙇‍♂️

Goのhttpパッケージでパスパラメータを取る

2023/03/21に公開2

RESTでアプリのURL設計する際にパスのパラメータを取得したい時があります。
例えば特定のユーザーの情報を取得するような時は以下のようなイメージ
/user/{ID}

Goのhttpパッケージでリクエストを受けた際にパスごとに処理をマップさせられますが、他のフレームワークなどにあるようなパスのパラメータを編集に保持する機能はないようです。以下のブログを参考にさせていただきました。

【Golang】net/httpのPath Parameterパース
https://rennnosukesann.hatenablog.com/entry/2020/03/29/000000

そのため、URLを踏襲する場合は文字列の加工などでパスを取得する必要があります
/user/{ID というようなケースなら簡単ですが
/user/{ID}/edit というケースだとやや複雑になります

例 /user/1/edit というケースで「1」を取得する場合

func example(w http.ResponseWriter, r *http.Request) {
  r.URL.String()[7:strings.Index(r.URL.String(), "/edit")]
}

URLを取得する処理ごとに文字列の加工処理を入れなければいけません。まだGoを勉強し始めたばかりですが有名なWFのGinだとパスパラメータを取得できるようでした。
https://gin-gonic.com/docs/examples/param-in-path/

動きを理解するために基本パッケージを使って勉強していましたが、やはり基礎の部分はフレームワークを利用すべきですね。

Discussion

ponzuponzu

httpパッケージのrequestを使って以下のようにすると楽かもしれません
下記コードは"/"で分割するので楽だと思います

prm := strings.Split(r.URL.Path, "/")

下記ライブラリもあるのでお時間がある時にぜひ
https://github.com/go-chi/chi

草苅 快草苅 快

ponzu さん、ありがとうございます!
書いていただいたコードの方が視認性も良いですね
ライブラリもありがとうございます。早速動かしてみます。