go - slice 后的括号?

标签 go slice

我最近开始学习围棋,并遵循了 tutorial .在教程中有一行:

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

他们有一个带括号定义的 slice :

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

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

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'} 的情况下,您只是使用复合文字语法进行初始化,这将始终适用于任何类型。在另一种情况下,正在发生转换,除此之外,它是字符串的特例。它碰巧看起来更像是一个构造函数被调用(因此使其成为复合文字语法的替代品)但这只是巧合。

关于go - slice 后的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30786884/

相关文章:

dictionary - 如何在 Julia 中使用带有复杂字典键的 husky() 和 in() 函数?

pointers - go - 写入接口(interface)的函数{}

javascript - array.slice 返回 1 个元素而不是两个

Python/Numpy - 在数组末尾包裹切片

java - 递归查找字符串的索引

go - 如何初始化 slice 以供将来分配?

python - NumPy:如何使用 argmin/max 输出沿单个维度折叠 N 维数组?

go - 如何使用指定的位数来fmt.Printf(“%b”,…)?

go - 枚举作为变量的属性

xml - 使用父属性动态解码子 XML