gpt4 book ai didi

go - dynamodbattribute.UnmarshalMap 将我的变量类型更改为 map[string]interface{}

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:18 27 4
gpt4 key购买 nike

背景

我正在尝试将 dynamodb.GetItem 返回的项目解码到一个对象中,我在那个地方不知道是哪种类型。为此,我有一个函数 emptyItemConstructor,它返回所需类型的新对象 t。

问题

我有这样一个函数:

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 的类型?

最佳答案

您的功能太复杂了。不要试图将“泛型”思维强加到 Go 中。只需这样做:

func GetItem(i interface{}) {
_ = dynamodbattribute.UnmarshalMap(item, &i)
}

但不要忽略错误:

func GetItem(i interface{}) error {
return dynamodbattribute.UnmarshalMap(item, &i)
}

但是你根本不需要你的功能......只需使用

dynamodbattribute.UnmarshalMap(item, &i)

如预期的那样。

关于go - dynamodbattribute.UnmarshalMap 将我的变量类型更改为 map[string]interface{},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57567917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com