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

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

Go map 的泛型值類型

Go map 的泛型值類型

Go
慕哥9229398 2021-11-22 18:20:50
我正在使用 Go 語言開發 Web 應用程序。該respond(writer, html, *params)函數需要一個可用于呈現 HTML 頁面的參數列表。我想出了一張地圖,因為它可以正常工作:&map[string][]string但是,最近我需要擠入一個值對,其格式{string, map[string][]string}顯然會炸毀編譯器。所以我想知道是否有任何我可以使用的泛型類型,即map[string]GenericType.歡迎任何想法。
查看完整描述

1 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

所以通常你存儲鍵的[]string值string。大多數時候。有時您想map[string][]string為一個string鍵存儲一個值。


首先,從地圖類型中刪除指針:地圖已經是小描述符,您可以傳遞地圖,它將傳遞描述符的副本而不是整個內容,如果您向副本添加新的鍵值對,您將在原文中看到。按值傳遞地圖是有效的,并且具有預期的效果/工作。


準確地說:地圖類型實際上是指向引擎蓋下的地圖描述符的指針,但這是一個實現細節,您無需知道這一點即可使用/使用地圖。唯一重要的是您可以有效地傳遞地圖值。


只保留一個映射并能夠存儲兩種類型的值,[]string并且map[string][]string需要您將值類型更改為interface{},但這將要求您每次訪問 params 映射中的元素時都使用類型斷言,例如:


params := map[string]interface{}{}

params["a"] = []string{"b", "c"}


if list, ok := params["a"].([]string); ok {

    fmt.Println(list)

}

當然,您可以創建一個新類型map[string]interface{}作為其基礎類型,并為最常見的值類型添加Get()和Set()方法[]string,但我建議struct為 params使用一個包裝器,在多個字段中使用多個映射:


type Params struct {

    P map[string][]string

    M map[string]map[string][]string

}

您的代碼可以使用具有適合要存儲的值的值類型的映射,例如:


params2 := Params{map[string][]string{}, map[string]map[string][]string{}}

params2.P["a"] = []string{"b", "c"}


params2.M["B"] = map[string][]string{

    "x": []string{"X", "Y"},

}


fmt.Println(params2.P["a"])

fmt.Println(params2.M["B"])

您還可以從最常用的地圖中向get 和 set 元素添加Get()和Set()方法。ParamsParams.P


查看完整回答
反對 回復 2021-11-22
  • 1 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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