第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

Go
慕工程0101907 2022-12-26 16:49:32
我想在 Golang 中為 hashmap 的值設(shè)置多種類型。我實現(xiàn)了 golang 泛型any,并編寫了返回的函數(shù)map[string]any。但是,在我運行代碼后,它返回了$ cannot use r.Method (variable of type string) as type T in map literal在 Go 中為 hashmap 值設(shè)置多種類型的正確方法是什么?這是我的代碼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)}不應(yīng)該T只是像別名一樣輸入任何內(nèi)容嗎?我誤會了什么嗎?
查看完整描述

1 回答

?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗 獲得超6個贊

T 不應(yīng)該像別名一樣輸入 any 嗎?

不,不應(yīng)該。

T是一個類型參數(shù),而不是any. 它僅.any

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

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

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,因此其類型集包含任何內(nèi)容

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


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

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

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


查看完整回答
反對 回復(fù) 2022-12-26
  • 1 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號