golang 切片中哪種類型的大小為零?我在閱讀golang slice的源碼時,發現了一段代碼et.size == 0,所以我想知道哪個類型的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 回答

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
Go 編程語言規范
尺寸和對齊保證
如果結構體或數組類型不包含大小大于零的字段(或元素),則其大小為零。兩個不同的零大小變量在內存中可能具有相同的地址。
例如,
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])
}
游樂場:https://play.golang.org/p/pn8Rz0IorwD
輸出:
0
7 [{} {} {} {} {} {} {}] 0x1c4c84 0x1c4c84
- 1 回答
- 0 關注
- 122 瀏覽
添加回答
舉報
0/150
提交
取消