猿问

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

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}

    }

    ...

}


catspeake
浏览 91回答 1
1回答

翻翻过去那场雪

Go 编程语言规范尺寸和对齐保证如果结构体或数组类型不包含大小大于零的字段(或元素),则其大小为零。两个不同的零大小变量在内存中可能具有相同的地址。例如,package mainimport (    "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输出:07 [{} {} {} {} {} {} {}] 0x1c4c84 0x1c4c84
随时随地看视频慕课网APP

相关分类

Go
我要回答