为了账号安全,请及时绑定邮箱和手机立即绑定

golang 切片中哪种类型的大小为零?

golang 切片中哪种类型的大小为零?

Go
catspeake 2023-07-04 16:55:37
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


查看完整回答
反对 回复 2023-07-04
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信