Closed4
Go言語のnilと、JSONのNULLと、MySQLのNULLの関係性を試してみたのでメモ
結論
Go言語のnilは、JSONのNULLとして解釈されるし、MySQLにもNULLとして解釈される。
図にすると下記になるイメージ。
nil(Go) <-> NULL(JSON)
nil(Go) <-> NULL(MySQL)
MySQL補足メモ
- Goのnil値を、NULL許容のテーブルにInsertするとNULlとして保存される。具体例はこちら。
- ChatGPT曰く、nil値をNULLとしてDBに保存する仕組みは、Goのデータベースドライバが提供しているとのこと。
- 逆にNULLをGoの構造体にマッピングするにはnilが設定できる型(ex. ポインタ型)にする必要がある。
- ポインタ型にしていない場合は下記のようにエラーが表示された。具体例はこちら(エラーになるので具体例に意味はない。あくまでイメージ的な実装)。
sql: Scan error on column index 1, name "age": converting NULL to int is unsupported
下記の関係性は直感的だと思うけど、JSONを構造体にする時にnilが入らない型の場合はゼロ値が入るっていうのはたまに気になってたので理解できて良かった。
nil(Go) <-> NULL(JSON)
nil(Go) <-> NULL(MySQL)
このスクラップは2023/07/23にクローズされました