首发于:https://studygolang.com/articles/12381
Go 是静态类型的编程语言。存储到变量中的值必须与变量的类型匹配。因此,不能像 Python 这种动态类型语言一样,随意的数据都可以作为值赋给变量。这个决定什么是允许赋值的规则就叫做可赋值性(Assignability)。
左边类型为 T 的变量,存在 6 种可以将右边的值赋给左边的情况。
相同类型(Identical types)
第一种是非常明显的。如果右边的类型(也)是 T,则赋值是完全可以的。更多的细节可以参考 "Identical types in Go"。
相同的基础类型(Identical underlying types)
在 Go 语言中,每种类型都有一种基础类型(underlying type)。对于布尔型,数字,字符串或者常量的基础类型都跟它们本身的类型相同。其他的基础类型来自于声明时的类型:
可赋值的第二种情况是相同的基础类型:
然而,如果有两个不同的命名类型(named types),则不能这么做:
附加的条件是要求至少一个类型不是一个命名类型。
Go 中的变量要么是命名类型(named)要么是非命名类型(unnamed)。非命名类型(unnamed types)是指使用类型字面意思(语言本身)定义的类型:
将一个实现了接口 T 的变量赋值给 T 接口类型的变量
如果一个变量实现了接口 T,那么我们可以将这个变量赋值给一个 T 接口类型的变量。
领取专属 10元无门槛券
私享最新 技术干货