go - 如何将结构转换为基本类型,而不是 Go 中的直接类型?
问题描述
我需要将未知立即类型的接口转换为已知的基本类型。
例子
package main
import (
"fmt"
"reflect"
)
type A struct {
foo string
}
type B A
func main() {
bS := B{foo: "foo"}
bI := reflect.ValueOf(bS).Interface()
fmt.Println(bI)
aS := bI.(A)
fmt.Println(aS)
}
运行此代码时,可以理解的是,它会出现以下消息恐慌
panic: interface conversion: interface {} is main.B, not main.A
在这个例子中:
- 接收接口 bI 的代码不知道类型 B
- 类型 B 保证是类型 A 的别名,这是已知的。
编辑:我不能在这里使用类型别名,因为这意味着 B 类型将成为编写 A 类型的另一种方式,所以我会丢失我在 B 类型上定义的所有自定义方法。
解决方案
type aliasing
您可以使用(在 Go1.9 中发布)来解决这个问题。
package main
import (
"fmt"
"reflect"
)
type A struct {
foo string
}
type B = A
func main() {
bS := B{foo: "foo"}
bI := reflect.ValueOf(bS).Interface()
fmt.Println(bI)
aS := bI.(A)
fmt.Println(aS)
}
NBtype B = A
使演员能够工作。
推荐阅读
- python - 如何将多列转换为单列?
- angular - 如何从 Firestore 上的谷歌地图保存多个起点和终点/标记并列出它们
- .net-core - dotnet 还原失败并出现错误 MSB4062:无法加载“CheckForImplicitPackageReferenceOverrides”任务
- spring-boot - Springboot中的Birt
- python - 渲染具有不同预先计算的 bin 形状和频率的直方图
- reactjs - 如何使用 React.js 从模态发布动态表单数据
- vba - 如何计算一个值乘以另一个值?
- android - 如何在 Android 中的框架布局上显示可扩展布局?
- php - 按键值php的数组格式
- canvas - HTML Canvas - 使用 toDataURL 裁剪画布的旋转部分