我需要使用反射从接口创建一个结构体切片。
由于没有其他解决方案,因此我使用了反射。
简要来说,该函数接收接口的可变值。
然后,通过反射创建切片并将其传递到另一个函数中。
反射要求类型断言。
SliceVal.Interface().(SomeStructType)
但是,我无法使用它。
在playground中的代码http://play.golang.org/p/EcQUfIlkTe 这段代码:
package main
import (
"fmt"
"reflect"
)
type Model interface {
Hi()
}
type Order struct {
H string
}
func (o Order) Hi() {
fmt.Println("hello")
}
func Full(m []Order) []Order{
o := append(m, Order{H:"Bonjour"}
return o
}
func MakeSlices(models ...Model) {
for _, m := range models {
v := reflect.ValueOf(m)
fmt.Println(v.Type())
sliceType := reflect.SliceOf(v.Type())
emptySlice := reflect.MakeSlice(sliceType, 1, 1)
Full(emptySlice.Interface())
}
}
func main() {
MakeSlices(Order{})
}