2 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
Go 中唯一的多態(tài)性是接口。唯一的替代方法是反思、復(fù)制或重新考慮更廣泛的設(shè)計(jì),這樣您就不需要做您在這里想做的事情。
如果最后一個(gè)選項(xiàng)不可能,我個(gè)人建議復(fù)制,因?yàn)樗钦男写a。
keys := make([]string, 0, len(myMap))
for key,_ := range myMap {
keys = append(keys,key)
}
一個(gè)大而復(fù)雜的通用助手似乎是不必要的。

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用接口的解決方案。這個(gè)例子可能看起來(lái)有點(diǎn)矯枉過(guò)正,在你的情況下(我不確定,你的例子中沒(méi)有足夠的細(xì)節(jié))最好只使用幾個(gè)循環(huán)for。
package main
import (
"fmt"
)
type foo bool
type bar string
type mapOne map[string]foo
type mapTwo map[string]bar
func (m mapOne) Keys() []string {
s := []string{}
for k := range m {
s = append(s, k)
}
return s
}
func (m mapTwo) Keys() []string {
s := []string{}
for k := range m {
s = append(s, k)
}
return s
}
type ToKeys interface {
Keys() []string
}
func main() {
m1 := mapOne{"one": true, "two": false}
m2 := mapTwo{"three": "foo", "four": "bar"}
doSomething(m1)
doSomething(m2)
}
func doSomething(m ToKeys) {
fmt.Println(m.Keys())
}
游樂(lè)場(chǎng)示例
- 2 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報(bào)