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 关注
- 105 浏览
添加回答
举报