我认为 go 不允许任何命名类型在没有显式类型转换的情况下进行实际类型分配。但是,如果我分配[]byte给它,它如何编译而不会出错json.RawMessage?var a json.RawMessage // type RawMessage []bytevar b []bytea = bvar x time.Duration // type Duration int64var y int64x = y // ERROR: cannot use y (type int64) as type time.Duration in assignmenthttps://play.golang.org/p/oD5LwJl7an
1 回答
森林海
TA贡献2011条经验 获得超2个赞
int64是命名类型,[]byte是未命名类型。
命名类型由(可能限定的)类型名称指定;未命名类型是使用类型文字指定的,它从现有类型组成一个新类型 - golang 规范
还
如果两个命名类型的类型名称源自相同的 TypeSpec,则它们是相同的。命名类型和未命名类型总是不同的。如果对应的类型文字相同,即如果它们具有相同的文字结构并且对应的组件具有相同的类型,则两个未命名类型是相同的。- golang 规范
所以
type MyByteArray []byte
type MyInt int
var a MyByteArray
var b []byte
a = b // legal because array is unnamed - their corresponding type literals are identical
var x MyInt
var y int
x = y // illegal because int is named - they don't originate in the same type spec
- 1 回答
- 0 关注
- 191 浏览
添加回答
举报
0/150
提交
取消
