背景
我正在尝试将dynamodb.GetItem
返回的项解组为一个对象,在那里我不知道该对象的类型。为此,我有一个函数emptyItemConstructor
,它返回一个所需类型的新对象。
问题
我有这样一个函数:
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
:
func constructor() MyDynamoDBItemType {
return MyDynamoDBItemType{}
}
函数的输出为:
Type is: MyDynamoDBItemType
Type now is: map[string]interface
为什么UnmarshalMap要更改myItem的类型?
2条答案
按热度按时间58wvjzkj1#
你的函数太复杂了,不要再把“泛型”的思维强加给Go语言了,你可以这样做:
但不要忽视错误:
但是这样就不需要函数了...只需使用
如预期的那样。
zpgglvta2#
变量
myItem
的类型为interface{}
,UnmarshalMap
输入参数的类型也为interface{}
,赋值时没有底层类型的比较下面是一个例子:
如果您想将Map解组为结构,请尝试mapstructure包?