s := []byte("")
fmt.Println(cap(s)) //32
但
s := []byte("")
fmt.Println(cap(s)) //0
fmt.Println(s)
编译器是否进行了一些优化?
答案 0 :(得分:0)
它是0,你发现了一些特殊的东西,可能值得作为一个问题报告,
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)
}
这始终显示容量为0.