我将数据传递给带有输入类型接口的func。
此代码:
main(){
SampleData := Input{
Recipients: []string{"abc","efg"},
Msg: string("Test message"),
}
InsertInSendTBL(SampleData)
}
type Input struct {
Recipients []string
Msg string
sender string
}
type Output struct {
Recipients []string
Msg string
reciver string
}
func InsertInSendTBL(Data interface{}) {
DataInput := reflect.ValueOf(Data)
NewVal := Output{
Recipients: DataInput.FieldByName("Recipients").([]string{}),//LINE ERORE
Msg: DataInput.FieldByName("Msg").String(),
sender: "1000",
}
}
我的一个结构字段是字符串切片。我在反射包中搜索但没有找到任何东西所以我使用“。([] string {})”。 结果是这个错误:
无效的类型断言:DataInput.FieldByName(“Recipients”)。(composite literal)(左边的非接口类型reflect.Value)
所以我尝试接口反射但是另一个错误
不能使用DataInput.FieldByName(“Recipients”)。Interface()(类型interface {})作为字段值类型[]字符串:需要类型断言
答案 0 :(得分:3)
您需要结合两次尝试:
sliceOfString, ok := DataInput.FieldByName("Recipients").Interface().([]string)
if !ok {
panic("Not a []string!")
}