你好,我正在学习 Go
,并且在进行一些反射操作时遇到了困难,具体如下:
- 我想要创建一个由传递给函数的
interface{}
类型的struct
切片 - 然后我想要向该切片中添加新元素
这里是一个带有代码示例的Playground。
package main
import (
"fmt"
"reflect"
)
type A struct{ Name string }
func main() {
bbb(A{})
}
func aaa(v interface{}) {
sl := reflect.ValueOf(v).Elem()
typeOfT := sl.Type()
ptr := reflect.New(typeOfT).Interface()
s := reflect.ValueOf(ptr).Elem()
sl.Set(reflect.Append(sl, s))
ptr = reflect.New(typeOfT).Interface()
s = reflect.ValueOf(ptr).Elem()
sl.Set(reflect.Append(sl, s))
}
func bbb(v interface{}) {
myType := reflect.TypeOf(v)
models := reflect.Zero(reflect.SliceOf(myType)).Interface()
aaa(&models)
fmt.Println(models)
}
错误: panic: reflect: 在接口值上调用reflect.Append
有没有办法让它工作?注意:我想要在引用上工作。
解决方案:
这是我所能做到的:示例代码。