可空型別可以置為nil
在go裡面,基本型別都是不可空型別
var a int = nil
var a int // default value of int, cannot be nilfmt.println(a) // 0
0
types
zero value
int, int8, int16, int32, int64
0uint, uint8, uint16, uint32, uint64
0uintptr
0float32, float64
0.0byte
0rune
0string
"」 (empty string)
complex64, complex128
(0,0i)
boolean
false
arrays of non-nillable types
array of zero-values
arrays of nillable types
array of nil-values
struct
可空型別的預設值為
需要保持可警惕,是否未nil,在可空型別在被初始化之前使用,可能會導致panic
可空型別包含:
但是,對空map賦值會導致panic
type person structfunc main() 有乙個空字串
fmt.print(mp["me"])
// nil
fmt.println(mpp["me"])
// 空字串
fmt.println(mps[99])
// panic: assignment to entry in nil map
mps[1] = "sss"
}
**鏈結
var mp map[string]int//panic: assignment to entry in nil map
mp["me"] = 0
// 0 0
fmt.println(len(s), cap(s))
fmt.println(s)
//panic: runtime error: index out of range [1] with length 1
fmt.println(s[1])
**位址
以上型別使用對時候需要保持留意是否為nil值
var p *int // pointer to an int*p++ // panic: runtime error: invalid memory address or nil pointer dereference
// p is an address to nothing, and therefore is nil
var p error // nil-value of type errorerror.error() // panic: runtime error: invalid memory address or nil pointer dereference
var f func(string) // nil-functionf("oh oh") // panic: runtime error: invalid memory address or nil pointer dereference
var c chan bool//fatal error: all goroutines are asleep - deadlock!
c <- true
fmt.println("hello world")
var c chan bool//panic: close of nil channel
close(c)
fmt.println("hello world")
系統地學習go各種型別的預設值
語雀博文 《golang的可空型別和零值》
可空值型別
一 問題產生 在設計資料庫時,資料庫中的一列可能為null值,而這使我們在處理資料庫中的資料時將變得困難,因為clr沒有辦法將int型別表示成null值。二 解決辦法 1 在設計資料庫時,設定列的預設值,避免列存入空值 2 clr引入可空值型別 三 system.nullable結構定義的邏輯表示 ...
可空值型別
1 可空值型別 system.nullablewhere t struct 2 system.nullable與 int,double平級,為.net中的 一級公民 3 int32 nullable 4 nullable型別值與各種操作符進行運算,如果 nullable為null,則 結果為 nul...
可空值型別
c 中的可空值型別 c 不允許把null值賦給乙個值型別,以下語法是錯誤的 int i a null 但是,利用 c 定義的乙個修飾符,可將乙個變數宣告為乙個可空 nullable 值型別。可空值型別在行為上與普通值型別相似,但可以將乙個 null 值賦給它。如下所示 int?a null 合法 當...