golang 切片中哪種類型的大小為零?我在閱讀golang slice的源碼時(shí),發(fā)現(xiàn)了一段代碼et.size == 0,所以我想知道哪個(gè)類型的size是0?func growslice(et *_type, old slice, cap int) slice { ... if et.size == 0 { if cap < old.cap { panic(errorString("growslice: cap out of range")) } return slice{unsafe.Pointer(&zerobase), old.len, cap} } ...}
1 回答

翻翻過(guò)去那場(chǎng)雪
TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
Go 編程語(yǔ)言規(guī)范
尺寸和對(duì)齊保證
如果結(jié)構(gòu)體或數(shù)組類型不包含大小大于零的字段(或元素),則其大小為零。兩個(gè)不同的零大小變量在內(nèi)存中可能具有相同的地址。
例如,
package main
import (
? ? "fmt"
? ? "unsafe"
)
func main() {
? ? type zero struct{}
? ? fmt.Println(unsafe.Sizeof(zero{}))
? ? slice := make([]zero, 7)
? ? fmt.Printf("%d %v %p %p\n", len(slice), slice, &slice[0], &slice[len(slice)-1])
}
游樂(lè)場(chǎng):https://play.golang.org/p/pn8Rz0IorwD
輸出:
0
7 [{} {} {} {} {} {} {}] 0x1c4c84 0x1c4c84
- 1 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報(bào)
0/150
提交
取消