当前位置: > > > > 为什么 Golang 类型别名有时兼容有时不兼容?
来源:stackoverflow
2024-04-21 18:33:35
0浏览
收藏
从现在开始,我们要努力学习啦!今天我给大家带来《为什么 Golang 类型别名有时兼容有时不兼容?》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!
问题内容
下面的代码工作得很好:
type alias []byte type data struct { x alias } func main() { s2 := []byte("s2") s1 := &data{ x: s2, } var s4 alias = s2 fmt.println(s1,s2, s4) }
但以下内容无法编译
type alias string type 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) } }
唯一的区别是类型别名从字节切片更改为字符串。
这些类型之间有什么区别,一种是自动转换的,另一种不是?
解决方案
根据 Go 语言规范:
此特定条款:
x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中至少有一个不是定义的类型。
请注意,string
是已定义类型,而 []byte
是未定义类型。所以:
- 您可以将
[]byte
分配给alias
,因为它们具有相同的基础类型,并且[]byte
是未定义类型 - 您无法将
string
分配给alias
,因为它们都是定义的类型。
以上就是《为什么 Golang 类型别名有时兼容有时不兼容?》的详细内容,更多关于的资料请关注公众号!