做法
在一些情況下,資料庫裡的日期欄位會是 NULL,比方說 ReviewedAt 欄位,如果有值,表示「已審核」,如果為 NULL,表示「未審核」。
1 | type Model struct { |
這裡的 ReviewedAt 如果是 time.Time 型別:
1 | type ReviewedAt time.Time |
當 ReviewedAt 欄位為 NULL,且序列化成 JSON 格式時,日期會變成預設值。
1 | { |
標準庫 database/sql 有提供 sql.NullTime 型別可以做為替代方案,如下:
1 | type ReviewedAt sql.NullTime |
sql.NullTime 型別包含了 Time 和 Valid 屬性:
1 | type NullTime struct { |
不過,當 ReviewedAt 欄位為 NULL,且序列化成 JSON 格式時,日期會變成以下物件:
1 | { |
因此需要進一步封裝 sql.NullTime 型別:
1 | package model |
在模型中使用封裝後的 NullTime 型別:
1 | type Model struct { |
現在,當 ReviewedAt 欄位為 NULL,且序列化成 JSON 格式時,日期就可以顯示為 NULL。
1 | { |