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

Golang 底层类型

Golang 底层类型

Go
子衿沉夜 2021-09-27 14:26:01
在这个规范的代码片段中type T1 stringtype T2 T1type T3 []T1type T4 T3规范说:字符串T1、 和的基础类型T2是string。基础类型的[]T1,T3和T4是[]T1。为什么底层类型是T2not T1,but string?不应该的基本类型T4改为[]string而不是[]T1如果基础类型T1是string?使困惑。
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

该规范中提到:


每个类型T都有一个底层类型:如果T是预先声明的布尔值、数字或字符串类型之一,或者类型文字,则相应的底层类型是T它自己。

否则,T的基础类型是T在其类型声明中引用的类型的基础类型。


T2在其类型声明中引用 to T1,它具有基础类型string。


这是基础类型的重要T2要string,因为这将有助于为可转让哪里


值 x 可分配给 T 类型的变量(“x 可分配给 T”)

x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中的至少一个不是命名类型。


这在“ Golang:为什么我可以键入别名函数并在不强制转换的情况下使用它们? ”中也有详细说明。


当谈到 的底层类型时T4,我们谈论的是底层未命名类型[]T1。


再一次,可分配性规则说您可以分配[]T1给 T4(因为[]T1它不是命名类型):它的基础类型在第一个未命名类型 ( []T1)处停止。


在操场上看到这个例子


var t3 T3 = []T1{"a", "b"}

fmt.Println("t3='%+v'", t3)

// var t4 T4 = []string{}

// cannot use []string literal (type []string) as type T4 in assignment

var t4 T4 = T4(t3)

fmt.Println("t4='%+v'", t4)

t4 = []T1{T1("c"), T1("d")}

fmt.Println("t4='%+v'", t4)

输出:


t3='%+v' [a b]

t4='%+v' [a b]

t4='%+v' [c d]


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信