Go-通过反射附加到[]接口{}

Go-通过反射附加到[]接口{},go,Go,在没有反射的情况下,可以将多个类型添加到类型[]接口{}的列表中。像这样: package main import "fmt" func main() { var foo []interface{} foo = append(foo, "Test") foo = append(foo, "Foo") foo = append(foo, 10) fmt.Printf("%v\n", foo) } 这是否可能与反射有关?我尝试了下面的方法,但是我得到了一

在没有反射的情况下,可以将多个类型添加到类型[]接口{}的列表中。像这样:

package main

import "fmt"

func main() {
    var foo []interface{}
    foo = append(foo, "Test")
    foo = append(foo, "Foo")
    foo = append(foo, 10)
    fmt.Printf("%v\n", foo)
}
这是否可能与反射有关?我尝试了下面的方法,但是我得到了一个提示:“类型字符串的panic:reflect.Set:value不可分配给类型[]接口{}”


Foo
字段的类型已经是
[]接口{}
,因此
SliceOf
正在创建一个
[]接口{}
,这就是您看到的错误的原因

删除的
切片,然后使用
字段。Set(rslice)
将新值设置回struct字段

func rf(inf interface{}) {
    val := reflect.Indirect(reflect.ValueOf(inf))
    field := val.FieldByName("Foo")
    rslice := reflect.MakeSlice(field.Type(), 0, 5)
    v := reflect.Indirect(reflect.ValueOf("Test"))
    rslice = reflect.Append(rslice, v)
    field.Set(rslice)
}

func rf(inf interface{}) {
    val := reflect.Indirect(reflect.ValueOf(inf))
    field := val.FieldByName("Foo")
    rslice := reflect.MakeSlice(field.Type(), 0, 5)
    v := reflect.Indirect(reflect.ValueOf("Test"))
    rslice = reflect.Append(rslice, v)
    field.Set(rslice)
}