返回介绍

第九十天

发布于 2023-06-25 22:22:03 字数 2271 浏览 0 评论 0 收藏 0

1.下面代码能通过编译吗?

type T int

func F(t T) {}

func main() {
    var q int
    F(q)
}

2.下面代码能通过编译吗?请简要说明。

type T []int

func F(t T) {}

func main() {
    var q []int
    F(q)
}

我们将这两道题目放到一块做一个解析,第一题不能通过编译,第二题可以通过编译。我们知道不同类型的值是不能相互赋值的,即使底层类型一样,所以第一题编译不通过;对于底层类型相同的变量可以相互赋值还有一个重要的条件,即至少有一个不是有名类型(named type)。

这是 Go 语言规范手册的原文:

"x's type V and T have identical underlying types and at least one of V or T is not a named type. "

Named Type 有两类:

  • 内置类型,比如 int, int64, float, string, bool 等;
  • 使用关键字 type 声明的类型;

Unnamed Type 是基于已有的 Named Type 组合一起的类型,例如:struct{}、[]string、interface{}、map[string]bool 等。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文