切片后的括号 go?

m0m*_*eni 5 go slice

我最近开始学习围棋,并按照教程进行操作。在教程中有一行:

p1 := &Page{Title: "TestPage", Body: []byte("This is a sample Page.")}
Run Code Online (Sandbox Code Playgroud)

他们有一个带括号的切片:

[]byte("This is a sample Page.")
Run Code Online (Sandbox Code Playgroud)

然而,从我读过的所有文档中,我从未见过切片后的括号。我只看过格式:

b := []byte{'g', 'o', 'l', 'a', 'n', 'g'}
Run Code Online (Sandbox Code Playgroud)

使用花括号。括号的作用是什么?

eva*_*nal 4

从规格来看;

\n\n
\n

将字符串类型的值转换为字节类型的切片会生成一个切片,其连续元素是字符串的字节。

\n\n
[]byte("hell\xc3\xb8")   // []byte{\'h\', \'e\', \'l\', \'l\', \'\\xc3\', \'\\xb8\'}\n[]byte("")        // []byte{}\n\nMyBytes("hell\xc3\xb8")  // []byte{\'h\', \'e\', \'l\', \'l\', \'\\xc3\', \'\\xb8\'}\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

在这里查看完整的转换规则;https://golang.org/ref/spec#Conversions

\n\n

基于此,虽然这两行代码导致相同的行为,但它们实际上正在执行完全不相关的语言功能。如果[]byte{\'l\', \'o\', \'l\'}您只是使用复合文字语法进行初始化,并且这始终适用于任何类型。在另一种情况下,会发生转换,除此之外,它是字符串的特殊情况。它看起来更像是正在调用构造函数(从而使其成为复合文字语法的替代品),但这只是巧合。

\n