2 回答

TA貢獻1797條經驗 獲得超4個贊
Go 中唯一的多態性是接口。唯一的替代方法是反思、復制或重新考慮更廣泛的設計,這樣您就不需要做您在這里想做的事情。
如果最后一個選項不可能,我個人建議復制,因為它是整整四行代碼。
keys := make([]string, 0, len(myMap))
for key,_ := range myMap {
keys = append(keys,key)
}
一個大而復雜的通用助手似乎是不必要的。

TA貢獻1783條經驗 獲得超4個贊
使用接口的解決方案。這個例子可能看起來有點矯枉過正,在你的情況下(我不確定,你的例子中沒有足夠的細節)最好只使用幾個循環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())
}
游樂場示例
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報