go - 如何在运行时创建具有指定类型的元素数组
问题描述
我正在尝试创建一个只有在运行时才知道类型的元素数组(pkg API 可以检索 json 中的元素并转换为 struct)。我有一个类似下面的辅助函数,它将接口作为参数并在调用 make 时尝试获取接口的类型。
golang 编译器似乎不喜欢它。
var whatAmI = func(i interface{}) {
a := reflect.TypeOf(i)
//var typ reflect.Type = a
b := make (a, 10) //10 elem with type of i
//b := new (typ)
fmt.Printf ("a: %v b: %v", a, b)
}
prog.go:21:14: a 不是类型
我尝试了反射的各种组合,但到目前为止没有任何帮助。在我看来,这可能是一个常见的问题。我该如何解决/解决这个问题?
解决方案
给定元素类型的值,获取切片的类型v
:
sliceType := reflect.SliceOf(reflect.TypeOf(v))
创建一个具有长度和容量的切片(此处均为 10)。
slice:= reflect.MakeSlice(sliceType, 10, 10)
根据您在做什么,您可能希望通过在 reflect.Value 上调用 Interface() 来获取实际的切片值:
s := slice.Interface()
推荐阅读
- c# - C# JsonConvert.DeserializeObject 没有正确填充对象
- javascript - Vue - 如何制作
基于外部控制动态激活 - php - 如何在php中将上传图像到服务器从字符串更改为多部分?
- sql - 使用子查询更新表
- javascript - 在单个页面上预览多个图像
- java - 在生产环境中运行 OpenJDK 11.0.1
- javascript - 如何以编程方式更改 amStockChart 的缩放级别?
- android - 带有按钮的 Firebase ArrayList 更新 firebase 数据
- android - 将 firebase_messaging 插件添加到 Flutter 项目
- javascript - 一个 mTurk HIT 中有多个问题。创建下一个按钮