Go中的泛型编程,隐式泛型类型

时间:2015-06-01 18:47:16

标签: generics reflection go

我需要Go来隐式解析我的结构类型,以便对某些属性进行泛型替换。

gcc x.c -L.\. -lfftw3

请查看Go操场上的完整示例... http://play.golang.org/p/jxxSB5FKEy

1 个答案:

答案 0 :(得分:1)

convertedObjectobject界面中的值。取其地址对原始customer没有影响。 (并且转换后可能是名称的不良前缀,因为它是从“类型断言”生成的,而不是“类型转换”)

如果您直接使用对象,则会发生恐慌,因为您接着是接口的地址,而不是客户。

您需要将要修改的客户的地址传递给函数:

SetAttribute(&customer, "Local", addressNew, reflect.TypeOf(Customer{}))

你也可以让你的SetAttribute检查它是否是指针:

if reflect.ValueOf(object).Kind() != reflect.Ptr {
    panic("need a pointer")
}

value := reflect.ValueOf(object).Elem() 
field := value.FieldByName(attributeName)
valueForAtt := reflect.ValueOf(attValue)
field.Set(valueForAtt)
return value.Interface()