Go []字节(“字节”)的默认容量是多少?

Go []字节(“字节”)的默认容量是多少?,go,Go,但是 编译器是否进行了一些优化?它是0,您发现了一些特殊的问题,可能值得报告 s := []byte("") fmt.Println(cap(s)) //0 fmt.Println(s) 这始终显示容量为0 我认为规范中没有定义这一点,所以技术上的答案应该是“它依赖于实现”。您确定提供了正确的示例吗?两张都是我的32号。什么是打印0is:=make([]字节,0)@jedruniu是的,我确定。我试过在歌朗游乐场。当然可以,但是你在这个特殊的操场上看到了什么呢?32?是的,go编译器确实做了

但是


编译器是否进行了一些优化?

它是0,您发现了一些特殊的问题,可能值得报告

s := []byte("")
fmt.Println(cap(s))  //0
fmt.Println(s)

这始终显示容量为0

我认为规范中没有定义这一点,所以技术上的答案应该是“它依赖于实现”。您确定提供了正确的示例吗?两张都是我的32号。什么是打印0i
s:=make([]字节,0)
@jedruniu是的,我确定。我试过在歌朗游乐场。当然可以,但是你在这个特殊的操场上看到了什么呢?
32
?是的,go编译器确实做了很多优化:这不是问题,它是编译器优化。
s := []byte("")
fmt.Println(cap(s))  //0
fmt.Println(s)
package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

func main() {
    s := []byte{}
    hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s))
    fmt.Printf("%#v\n", hdr)

    d := make([]byte, 0)
    hdr = (*reflect.SliceHeader)(unsafe.Pointer(&d))
    fmt.Printf("%#v\n", hdr)

    a := []byte("")
    hdr = (*reflect.SliceHeader)(unsafe.Pointer(&a))
    fmt.Printf("%#v\n", hdr)    
}