以下代码可以正常工作:type alias []bytetype data struct { x alias}func main() { s2 := []byte("s2") s1 := &data{ x: s2, } var s4 alias = s2 fmt.Println(s1,s2, s4)}但以下内容无法编译type alias stringtype data struct { x alias}func main() { s2 := string("s2") s1 := &data{ x: s2, // needs explicit alias(s2) } var s4 alias = s2 // needs explicit alias(s2) fmt.Println(s1,s2, s4)}}唯一的区别是类型别名从字节切片变为字符串。这些类型之间有什么区别,一种是自动转换的,另一种不是?
1 回答

潇湘沐
TA贡献1816条经验 获得超6个赞
根据 Go 语言规范:
https://golang.org/ref/spec#Assignability
此特定条款:
x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中的至少一个不是定义的类型。
请注意,string
是一个已定义的类型,[]byte
是一个未定义的类型。所以:
您可以分配一个
[]byte
to,alias
因为它们具有相同的基础类型,并且[]byte
是未定义的类型您不能分配
string
到,alias
因为它们都是已定义的类型。
- 1 回答
- 0 关注
- 158 浏览
添加回答
举报
0/150
提交
取消