我正在使用gorm來定義我的數(shù)據(jù)庫表架構(gòu)。注意到它gorm本身使用time.Timeforcreated_at和*time.Timefor deleted_at。我假設(shè)這是因為deleted_at有NULL.我還注意到,對于許多 Golang ORM,它們sql.NullFloat64用于存儲可能是 afloat64或NULL. 為什么不直接使用*float64代替sql.NullFloat64?有什么不同?type Geo struct { latitude *float64 longitude sql.NullFloat64}// What is the difference between latitude and longitude in this case?
1 回答

回首憶惘然
TA貢獻1847條經(jīng)驗 獲得超11個贊
來自Russ Cox(根據(jù) Github 的最大圍棋貢獻者):https ://groups.google.com/forum/#! topic/ golang-nuts/vOTFu2SMNeA
沒有有效的區(qū)別。我們認為人們可能想要使用 NullString,因為它非常常見,并且可能比 *string 更清楚地表達意圖。但兩者都可以。
我在想,雖然使用指針可能會給 GC 帶來更多要跟蹤的事情。這可能取決于用法。
在-gcflags=-m
用于構(gòu)建的一些非常簡單的代碼上,轉(zhuǎn)義分析確實說明了這一點new(float64) escapes to heap
(這是我使用的虛擬代碼:https : //play.golang.org/p/K4sQaXyQKG)。
此外,在調(diào)試時,打印包含sql.NullSomething
( {value:{Float64:1 Valid:true}}
) 的結(jié)構(gòu)看起來比包含指針 ( {value:0xc82000a420}
)的結(jié)構(gòu)更好。
所以我建議使用sql.Null*
結(jié)構(gòu)體。
- 1 回答
- 0 關(guān)注
- 198 瀏覽
添加回答
舉報
0/150
提交
取消