参考文章: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
}
runtime/sizeclasses.goclass_to_size0, 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
}