Go dynamodbattribute.UnmarshalMap将my变量的类型存储到映射[string]接口{}
背景 我正在尝试将dynamodb.GetItem返回的项解组到一个对象中,我当时不知道该对象的类型。 为此,我有一个函数emptyItemConstructor,它返回所需类型的新对象t 问题: 我有这样一个函数:Go dynamodbattribute.UnmarshalMap将my变量的类型存储到映射[string]接口{},go,types,Go,Types,背景 我正在尝试将dynamodb.GetItem返回的项解组到一个对象中,我当时不知道该对象的类型。 为此,我有一个函数emptyItemConstructor,它返回所需类型的新对象t 问题: 我有这样一个函数: func GetItem(emptyItemConstructor func() interface{}) interface{} { myItem := emptyItemConstructor() fmt.Printf("Type is: %T\n", myItem)
func GetItem(emptyItemConstructor func() interface{}) interface{} {
myItem := emptyItemConstructor()
fmt.Printf("Type is: %T\n", myItem)
_ = dynamodbattribute.UnmarshalMap(item, &myItem)
fmt.Printf("Type now is: %T\n", myItem)
}
我将此函数传递给emptyItemConstructor:
该函数的输出为:
Type is: MyDynamoDBItemType
Type now is: map[string]interface
为什么解组映射要更改myItem的类型?变量myItem的类型是接口{},而解组映射输入参数的类型也是接口{}。赋值时不比较基础类型
例如:
包干管
进口fmt
func项接口{}{
返回结构{
名称字符串
}{姓名:波罗雪}
}
func ItemMapitem*接口{}{
*item=map[string]接口{}{
姓名:波洛雪,
}
}
func main{
m:=项目
fmt.Printf%T\n,m
ItemMap&m
fmt.Printf%T\n,m
}
如果要解组映射到结构,请尝试打包?您的函数太复杂了。不要试图强迫泛型思维进入围棋。只要这样做:
func GetItem(i interface{}) {
_ = dynamodbattribute.UnmarshalMap(item, &i)
}
但不要忽略错误:
func GetItem(i interface{}) error {
return dynamodbattribute.UnmarshalMap(item, &i)
}
但是你根本不需要你的功能。。。只用
dynamodbattribute.UnmarshalMap(item, &i)
正如预期的那样。您正在传递一个指向接口的指针以解组映射。不要那样做。更改构造函数以返回*MyDynamoDBItemType。MyDynamoDBItemType的定义是什么?
dynamodbattribute.UnmarshalMap(item, &i)