【发布时间】:2020-12-19 08:09:27
【问题描述】:
对于基本类型,如果它们的底层类型相同,我们可以轻松地转换类型。但是具有相同内存布局的结构内部的字段不能轻松地从一种类型转换为另一种类型。 这个问题有一个proposal,不幸的是它被拒绝了。经过一个小时的谷歌搜索但没有运气,我来到这里寻求专家的帮助。
看下面的例子 :
package main
import (
"fmt"
)
type Int int
type A struct {
name string
age Int
}
type B struct {
name string
age int
}
func main() {
var a A= A{"Foo",21}
var b B= B{"Bar", 21}
fmt.Println(a,b,(A)(b)) //Error here as expected
}
尽管结构 A 和 B 具有相同的基础类型 struct { string,int},为什么我不能相互转换,因为 Int 的基础类型是 int。
除非底层类型不同,否则是否可以递归转换?
【问题讨论】:
-
Go 中没有类型转换。您正在谈论类型转换,而这种类型的转换完全被禁止。
-
很抱歉。我来自 oops 背景,这会导致命名约定出现问题。
-
“类型转换”根本不是 OOP 概念。事实上,它比 OOP 早了几十年。这也不是命名约定的问题。这是功能问题。 “类型大小写”描述了 Go 不支持的非常具体的行为。
标签: go casting type-conversion