golang 由字符串生成字节切片的容量大小

参考文章:https://www.jianshu.com/p/448451663cf3

字符串常量转切片

对字符串常量转换的切片长度和容量都等于原字符串长度

func main() {
	// str := "test string"
	sli := []byte("test string")
	fmt.Printf("%s %d %d\n", sli, len(sli), cap(sli)) // test string 11 11
}

字符串变量转切片

  • 如果切片没有发生变量逃逸且字符串长度小于等于32,生成的切片容量为32
func main() {
	str := "test string"
	sli := []byte(str)
	fmt.Printf("%d %d\n", len(sli), cap(sli)) // 11 32
}
  • 如果切片发生变量逃逸或字符串长度大于32,根据字符串长度,生成的容量不同,容量值从runtime/sizeclasses.go文件中的class_to_size中取值:0, 8, 16, 32, 48, 64, 80, 96, 112, 128...
func main() {
	str := "test string"
	sli := []byte(str)
	fmt.Printf("%s %d %d\n", sli, len(sli), cap(sli)) // test string 11 16
}

func main() {
	str := "test"
	sli := []byte(str)
	fmt.Printf("%s %d %d\n", sli, len(sli), cap(sli)) // test 4 8
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值