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

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

Go中如何正確設置泛型值的多種類型?

Go中如何正確設置泛型值的多種類型?

Go
慕工程0101907 2022-12-26 16:49:32
我想在 Golang 中為 hashmap 的值設置多種類型。我實現了 golang 泛型any,并編寫了返回的函數map[string]any。但是,在我運行代碼后,它返回了$ cannot use r.Method (variable of type string) as type T in map literal在 Go 中為 hashmap 值設置多種類型的正確方法是什么?這是我的代碼package maintype RequestProperty struct {    Method string    Params []any    Id     int}func SetRequestProperty[T any](payloadCombine bool) map[string]T {    var p map[string]T    var r = RequestProperty{        Method: "SET_PROPERTY",        Params: []any{"combined", payloadCombine},        Id:     5,    }    // just for test    p = map[string]T{        "method": r.Method,  // << Error Here    }    return p}func main() {    p := SetRequestProperty(true)}[編輯] 這似乎有效......我不知道為什么。package maintype RequestProperty struct {    Method string    Params []any    Id     int}// delete [T any], map[string]T // change it to map[string]anyfunc SetRequestProperty(payloadCombine bool) map[string]any {    var p map[string]any    var r = RequestProperty{        Method: "SET_PROPERTY",        Params: []any{"combined", payloadCombine},        Id:     5,    }    // just for test    p = map[string]any{        "method": r.Method,    }    return p}func main() {    p := SetRequestProperty(true)}不應該T只是像別名一樣輸入任何內容嗎?我誤會了什么嗎?
查看完整描述

1 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

T 不應該像別名一樣輸入 any 嗎?

不,不應該。

T是一個類型參數,而不是any. 它僅.any

更一般地說:類型參數不是它的約束。

每次實例化泛型函數時,T都會為其分配一個具體類型參數(滿足其約束),并在函數體內map[string]T成為從string具體到任何具體T內容的映射。

p := SetRequestProperty[int](true)
// makes body look like: `var p map[string]int`
// the literal `map[string]int{"method": r.Method}` obviously can't work

因此在編譯時,編譯器將拒絕對與 的類型集中所有類型T不兼容的賦值。代碼無法編譯,因為:Tmap[string]T{"method": r.Method}

  • T受 約束any,因此其類型集包含任何內容

  • r.Method是類型string,并且string不可分配給任何東西。


With map[string]anyinsteadany不用作約束,它用作 static type,它是的別名,interface{}并且所有類型始終可分配給空接口。

如果您想擁有一個具有不同運行時類型的容器,那么使用any靜態類型map[string]any是唯一的方法。要限制允許的類型,請使用基本接口而不是類型參數。

另請參閱此處投票最高的答案:用類型參數替換接口參數有什么好處?


查看完整回答
反對 回復 2022-12-26
  • 1 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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