切片后的括号?
Parenthesis after a slice in 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'}
使用大括号。括号的作用是什么?
来自规范;
Converting a value of a string type to a slice of bytes type yields a slice whose successive elements are the bytes of the string.
[]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'}
的情况下,您只是简单地使用复合文字语法进行初始化,这将始终适用于任何类型。在另一种情况下,正在发生转换,除此之外,它是字符串的特例。它恰好看起来更像是一个构造函数被调用(因此使其成为复合文字语法的替代品)但这只是巧合。
我最近开始学习围棋,并遵循了 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'}
使用大括号。括号的作用是什么?
来自规范;
Converting a value of a string type to a slice of bytes type yields a slice whose successive elements are the bytes of the string.
[]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'}
的情况下,您只是简单地使用复合文字语法进行初始化,这将始终适用于任何类型。在另一种情况下,正在发生转换,除此之外,它是字符串的特例。它恰好看起来更像是一个构造函数被调用(因此使其成为复合文字语法的替代品)但这只是巧合。