去掉切片后的括号?

时间:2015-06-11 16:54:10

标签: go slice

我最近开始学习go,然后通过tutorial。在教程中有一行:

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

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

[]byte("This is a sample Page.")

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

b := []byte{'g', 'o', 'l', 'a', 'n', 'g'}

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

1 个答案:

答案 0 :(得分:2)

来自规范;

  

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

[]byte("hellø")   // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
[]byte("")        // []byte{}

MyBytes("hellø")  // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}

查看完整的转化规则; https://golang.org/ref/spec#Conversions

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