go語言的null值問題


關於go語言數據庫存儲和顯示null值的問題困擾了我很久,並且也和群友討論過這個問題,但是都沒有得到相對滿意和全面的答案。最近翻牆找了幾篇相對詳細和權威的文章,分享給大家,希望和大家一起進步,go go go!

 

文章一:Go語言:解決數據庫中null值的問題(轉載國人文章)

 

文章二:How I handled possible null values from database rows in Golang?(需科學上網)

 

文章三:Working effectively with database nulls(試驗過不需要科學上網)

 

Github:有沒有專門的null值函數庫?

 

https://github.com/guregu/null介紹

import "gopkg.in/guregu/null.v3"

null是一個具有合理選項的庫,用於處理可空的SQL和JSON值

有兩個包: null及其子包zero

null類型僅在null輸入時被視為null,並且JSON將編碼為null如果您需要零並且null被視為單獨的值,請使用這些值。

zero中的類型在Go中被視為零值:空字符串輸入將生成空零zero.String ,並且空字符串將JSON編碼為""這些類型的零值將被視為對SQL無效。 如果你需要零和null處理相同,使用這些。

所有類型都實現了sql.Scannerdriver.Valuer ,因此您可以使用此庫代替sql.NullXXX所有類型還實現: encoding.TextMarshalerencoding.TextUnmarshalerjson.Marshalerjson.Unmarshaler

null包

import "gopkg.in/guregu/null.v3"

null.String

可以為空的字符串。

如果SQL源數據為空,則Marshals為JSON null。 零(空白)輸入不會產生空字符串。 可以從sql.NullString JSON輸入或字符串輸入解sql.NullString

null.Int

可以為null的int64。

如果SQL源數據為空,則Marshals為JSON null。 零輸入不會產生null Int。 可以從sql.NullInt64 JSON輸入解sql.NullInt64

null.Float

可空浮動64。

如果SQL源數據為空,則Marshals為JSON null。 零輸入不會產生null Float。 可以從sql.NullFloat64 JSON輸入解sql.NullFloat64

null.Bool

可空的布爾。

如果SQL源數據為空,則Marshals為JSON null。 虛假輸入不會產生null Bool。 可以從sql.NullBool JSON輸入解sql.NullBool

null.Time

如果SQL源數據為空,則Marshals為JSON null。 使用time.Time的封送者。 可以從pq.NullTime和類似的JSON輸入解pq.NullTime

零包裝

import "gopkg.in/guregu/null.v3/zero"

zero.String

可以為空的字符串。

如果為null,將Marshal編排為空字符串。 空字符串輸入生成空字符串。 空值和零值被認為是等價的。 可以從sql.NullString JSON輸入解sql.NullString

zero.Int

可以為null的int64。

如果為null,將Marshal編排為0。 0產生一個空Int。 空值和零值被認為是等價的。 可以從sql.NullInt64 JSON輸入解sql.NullInt64

zero.Float

可空浮動64。

如果為null,將Marshal編排為0。 0.0產生一個null Float。 空值和零值被認為是等價的。 可以從sql.NullFloat64 JSON輸入解sql.NullFloat64

zero.Bool

可空的布爾。

如果為null,將Marshal編排為false。 false產生一個null Float。 空值和零值被認為是等價的。 可以從sql.NullBool JSON輸入解sql.NullBool

zero.Time

如果為null,將Marshal編排為零時間。 使用time.Time的封送者。 可以從pq.NullTime和類似的JSON輸入解pq.NullTime

錯誤

json",omitempty"結構標記現在無法正常工作。 它永遠不會省略null或空String。 這可能最終會得到解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM