为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Golang 类型别名有时兼容有时不兼容?

为什么 Golang 类型别名有时兼容有时不兼容?

Go
慕田峪4524236 2022-07-11 14:49:09
以下代码可以正常工作: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是一个未定义的类型。所以:

  • 您可以分配一个[]byteto,alias因为它们具有相同的基础类型,并且[]byte是未定义的类型

  • 您不能分配string到,alias因为它们都是已定义的类型。


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号