EDIT: 2024/12/04 Go1.24からomitzeroがencoding/jsonに追加される。 それに伴って記事に述べられているnon-sliceバージョンのund.Undのほうが推奨しやすくなったりいろいろ事情が変わる。 GoのT | null | undefinedは[]Option[T]でよかった github.com/oapi-codegen/nullableがmap[bool]Tをベースにencoding/jsonにオミットされることが可能なT | null | undefinedな型を定義していた (以前の記事時点では全然思いついてなかった) type Option[T any] struct{valid bool; v T}を定義してtype undefinedable []Option[T]としたほうがパフォーマンスが出るんじゃないかと思って試した。 ほんのち
![GoのJSONのT | null | undefinedは[]Option[T]で表現できる](https://cdn-ak-scissors.b.st-hatena.com/image/square/95313f041887eed998c33a9209422e1d962a2588/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--ShwMwP7F--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AGo%2525E3%252581%2525AEJSON%2525E3%252581%2525AET%252520%25257C%252520null%252520%25257C%252520undefined%2525E3%252581%2525AF%25255B%25255DOption%25255BT%25255D%2525E3%252581%2525A7%2525E8%2525A1%2525A8%2525E7%25258F%2525BE%2525E3%252581%2525A7%2525E3%252581%25258D%2525E3%252582%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Angicks%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2MyNWY1ZWUyMjcuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png)