Go语言中接口显式类型转换语句的名称及文档查询
Go中结构体到接口的显式转换问题
你提到的完整代码如下:
type Freder interface { Manger() } type Fred struct { poids int } func (f Fred) Manger() { fmt.Println("Hello, 世界") } func main() { f := Fred{68} a := Freder(f) t := reflect.TypeOf(a) fmt.Println(t) // <-- main.Fred fmt.Println(a) // {68} }
这种将已实例化的结构体值转换为接口类型的操作,叫做接口类型的显式转换(也可理解为将具体类型值显式赋值给接口类型变量的写法)。
在Go的类型系统中,只要某个具体类型实现了接口的全部方法,就可以把该类型的任意值(不管是刚通过字面量创建的,还是已存在的变量)转换为对应的接口类型——这是完全合法的操作,并不要求必须用字面量直接"实例化"接口类型。
关于这个操作的详细规则,可以查阅Go官方规范中的以下部分:
- 类型转换(Conversions):明确了具体类型到接口类型的转换规则
- 接口(Interfaces):说明了接口类型与实现它的具体类型之间的赋值、转换逻辑
内容的提问来源于stack exchange,提问作者freder
相关产品推荐
相关产品推荐

