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条经验 获得超13个赞
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 关注
- 90 浏览
添加回答
举报
0/150
提交
取消