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

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

獲取不同內(nèi)容映射的所有映射鍵

獲取不同內(nèi)容映射的所有映射鍵

Go
烙印99 2022-07-04 16:53:12
我有一個(gè)足夠通用的函數(shù)來遍歷 map[string] 并獲取所有鍵:i := 0keys := make([]string, len(input))for k := range input {    keys[i] = k    i++}return keys我的問題是我想在這里輸入兩個(gè)不同的輸入,一個(gè)map[string]MyStruct和map[string][][]float64。每當(dāng)我嘗試將 func 的輸入作為map[string]interface{}時(shí),go 都會(huì)拒絕我嘗試將 map[string]MyStruct 轉(zhuǎn)換為 map[string]interface{} 的所有嘗試。有沒有一種方法可以在不需要兩個(gè)函數(shù)的情況下做到這一點(diǎn),一個(gè)使用 map[string]MyStruct 作為輸入,一個(gè)使用 map[string][][]float64?map[string] 的內(nèi)容此時(shí)并不重要,因?yàn)槲抑皇窍氆@取它們的所有鍵以供稍后在代碼中使用。這需要是一個(gè)被調(diào)用的函數(shù);我們正在使用 Sonar,它被設(shè)置為拒絕代碼重復(fù),所以我不能復(fù)制這個(gè)代碼片段。
查看完整描述

1 回答

?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

在下一個(gè) Go 版本為我們帶來泛型之前,有幾種方法可以應(yīng)對它。

  1. 重復(fù)代碼

  2. 使用代碼生成 - 設(shè)計(jì)一些模板,然后繼續(xù)構(gòu)建將為您填充它。

  3. interface{}用作函數(shù)的輸入類型,然后使用反射來猜測函數(shù)的類型。我很確定在這種情況下,通用代碼將比 2 個(gè)單獨(dú)的函數(shù)更復(fù)雜。

func getKeys(input interface{}) []string {

    switch inp := input.(type) {

    case map[string]MyStruct:

        keys := make([]string, 0, len(inp))

        for k := range inp {

            keys = append(keys, k)

        }

        return keys

    case map[string][]float64:

        ...

    default:

        fmt.Printf("I don't know about type %T!\n", v)

}

您不能使用輸入類型map[string]interface{}來放置map[string]string,否則map[string][]string不會(huì)將每個(gè)值復(fù)制到新類型。您可以采用最通用的類型interface{},然后進(jìn)行轉(zhuǎn)換。


查看完整回答
反對 回復(fù) 2022-07-04
  • 1 回答
  • 0 關(guān)注
  • 137 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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