1 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
在下一個(gè) Go 版本為我們帶來泛型之前,有幾種方法可以應(yīng)對它。
重復(fù)代碼
使用代碼生成 - 設(shè)計(jì)一些模板,然后繼續(xù)構(gòu)建將為您填充它。
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)換。
- 1 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報(bào)