什么是[]字节("")默认容量?

时间:2018-05-08 12:19:35

标签: go

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

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

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

1 个答案:

答案 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.