我需要Go语言隐式解析我的结构体类型,以便对某个属性进行泛型替换。
//must replace the attribute with attValue
func SetAttribute(object interface{}, attributeName string, attValue interface{}, objectType reflect.Type) interface{} {
/// works perfectly, but function SetAttribute needs to know Customer type to do the convertion
convertedObject := object.(Customer) // <-- Need to hard code a cast :(
// doesn't works... raise panic!
//convertedObject := object
value := reflect.ValueOf(&convertedObject).Elem()
field := value.FieldByName(attributeName)
valueForAtt := reflect.ValueOf(attValue)
field.Set(valueForAtt)
return value.Interface()
}
请查看围棋游戏场中的完整示例... http://play.golang.org/p/jxxSB5FKEy
1条答案
按热度按时间fykwrbwg1#
convertedObject
是object
接口中的值。获取该值的地址对原始的customer
没有影响。(并且转换后的名称可能是一个不好的前缀,因为它是从“类型Assert”而不是“类型转换”生成的)如果直接使用object,它会出现混乱,因为您获取的是接口地址,而不是客户地址。
您需要将要修改的客户地址传递给函数:
您也可以让SetAttribute先检查它是否为指针: