亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

dynamodbattribute.UnmarshalMap 將變量的類型更改為

dynamodbattribute.UnmarshalMap 將變量的類型更改為

Go
開滿天機 2023-07-17 13:50:58
背景我正在嘗試將返回的項目解組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: MyDynamoDBItemTypeType now is: map[string]interface為什么 UnmarshalMap 改變 myItem 的類型?
查看完整描述

2 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

你的功能太復雜了。不要試圖將“泛型”思維強加到 Go 中。只需這樣做:


func GetItem(i interface{}) {

  _ = dynamodbattribute.UnmarshalMap(item, &i)

}

但不要忽視錯誤:


func GetItem(i interface{}) error {

  return dynamodbattribute.UnmarshalMap(item, &i)

}

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


dynamodbattribute.UnmarshalMap(item, &i)

如預期。


查看完整回答
反對 回復 2023-07-17
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

變量的類型myItem是,輸入參數interface{}的類型也是 。賦值時不比較底層類型UnmarshalMapinterface{}


示例如下:


package main


import "fmt"


func Item() interface{} {

? ? return struct {

? ? ? ? Name string

? ? }{Name: "poloxue"}

}


func ItemMap(item *interface{}) {

? ? *item = map[string]interface{}{

? ? ? ? "Name": "poloxue",

? ? }

}


func main() {

? ? m := Item()

? ? fmt.Printf("%T\n", m)

? ? ItemMap(&m)

? ? fmt.Printf("%T\n", m)

}

如果您想將 map 解組到 struct ,請嘗試使用mapstruct包?



查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號