首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go 语言中的可赋值性

首发于: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 接口类型的变量。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180717G0EO6300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券