我有一个类型的切片People,我需要将此切片传递给获取类型“interface {}”的函数。People 类型“实现”了一个名为 的接口HasCustomField,但我无法在函数内进行类型转换,就像我正在做的那样:
type HasCustomField interface {
GetCustomField() map[string]interface{}
}
type People struct {
Name string
customField map[string]interface{}
}
func (c *People) GetCustomField() map[string]interface{} {
if c.customField == nil {
c.customField = make(map[string]interface{})
}
return c.customField
}
func main() {
users := []People{{Name:"Teste"},{Name:"Mizael"}}
ProcessCustomField(&users)
}
func ProcessCustomField(list interface{}) {
if list != nil {
listVal := reflect.ValueOf(list).Elem()
if listVal.Kind() == reflect.Slice {
for i:=0; i<listVal.Len(); i++ {
valueReflect := listVal.Index(i).Interface()
objValueFinal, ok := valueReflect.(HasCustomField)
if ok {
fmt.Println("OK")
} else {
fmt.Println("NAO OK")
}
}
}
结果总是“不正常”,我无法进行转换,我也尝试了其他几种方法,包括GetCustomField()通过反射调用该方法,但不成功。
陪伴而非守候
相关分类