Open3

Go 1.22の新しいrouterについて

catatsuycatatsuy

/{aaaa}/bbb/{ccc}みたいな指定ができるが、/を前後に挟む必要がある。コード的にはガチガチ

https://github.com/golang/go/blob/af5943f90cc919c38188067bbe006bdc148b576c/src/net/http/pattern.go#L149-L155

例外はない。末尾に関しては/dddd/{eee...}という風に指定すれば/は不要になる。

なので/users/{user_id}.jsonみたいな指定はできない。正規表現も使えない。機能としては厳しすぎる。

catatsuycatatsuy

おそらくこの本質はそこにないのだと思っていて、重要なのはr.SetPathValuer.PathValueという標準関数が生まれたところ。

これまでリクエスト内で値を引き回したい場合はcontextを使うしかなかった。なのでrouterのライブラリはcontextに値を入れて引き回す構成にこれまでなっていた。

r.PathValueで値を引けるようになったことで、標準が生まれたことと、contextを利用する必要が無くなった。contextだと任意のキーを指定できるので、routerのライブラリを変更する場合に大変だった。標準の仕組みに乗ることで純粋にrouterの実装だけ考えていればよく、値を引き回す仕組みは標準に乗っかれる。