Golang中括号和花括号的区别

6
a := []byte("H") //works
a := []byte{"H"} //does not compile

在上面的用法中,“()”和“{}”之间的概念差异是什么?

6
第一个是将字符串转换为[]byte类型。第二个是形式上具有一个元素的[]byte文字量; 但当然,一个字符串不能是一个字节,所以它会失败。你真的应该参加Go之旅并阅读语言规范。 - Volker
https://tour.golang.org/welcome/1 - Adrian
2个回答

10

原因在于 类型转换切片字面量 之间的差异。

_ = []byte("Hi!")         // Converts a string literal to a []byte.
_ = []byte{'H', 'i', '!'} // Initializes a []byte literal

你的第二个示例 []byte{"H"} 编译失败,因为 "H" 是一个 字符串 文字,正在代替一个rune文字,这相当于尝试将字符串分配给一个字节类型的变量:

var y byte = 'H' // OK
var x byte = "H" // ERROR: cannot use "H" (type string) as type byte in assignment

4
在第一个例子中,a := []byte("H") 你将字符串"H" 转换为字节数组。
在第二个例子中,a := []byte{"H"} 你定义了一个字节数组并将 "H" 分配为其第一个值,这是无效的。
你可以将第二个例子与定义字符串数组进行比较:
s := []string{"hello","world",".."} // works
f := []string{1,2,4} // fails because the datatype is wrong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接