gpt4 book ai didi

go - 从反射类型创建 slice

转载 作者:IT王子 更新时间:2023-10-29 01:16:54 38 4
gpt4 key购买 nike

我正在尝试从 reflect.Type 创建 slice 。这是我目前所拥有的。

package main

import (
"fmt"
"reflect"
)

type TestStruct struct {
TestStr string
}

func main() {
elemType := reflect.TypeOf(TestStruct{})

elemSlice := reflect.New(reflect.SliceOf(elemType)).Interface()

elemSlice = append(elemSlice, TestStruct{"Testing"})

fmt.Printf("%+v\n", elemSlice)

}

但是我收到以下错误,我不确定如何在不硬编码转换为 []TestStruct 的情况下解决它。

prog.go:17: first argument to append must be slice; have interface {}

是否可以将返回的接口(interface)视为一个 slice ,而不必对从 interface{}[]TestStruct 的转换进行硬编码?

最佳答案

不,你所描述的是不可能的。不对 .Interface() 的结果进行类型断言会限制您的操作。最好的机会是继续使用 reflect.Value 值:

package main

import (
"fmt"
"reflect"
)

type TestStruct struct {
TestStr string
}

func main() {
elemType := reflect.TypeOf(TestStruct{})

elemSlice := reflect.MakeSlice(reflect.SliceOf(elemType), 0, 10)

elemSlice = reflect.Append(elemSlice, reflect.ValueOf(TestStruct{"Testing"}))

fmt.Printf("%+v\n", elemSlice)

}

https://play.golang.org/p/WkGPjv0m_P

关于go - 从反射类型创建 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38818915/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com