我写了一个函数,它将从map [string] Foo返回一个排序的字符串切片.我很好奇什么是创建一个通用例程的最佳方法,该例程可以从任何类型返回一个排序的字符串切片,该类型是一个以字符串为键的映射.
有没有办法使用接口规范?例如,有没有办法做类似的事情:
type MapWithStringKey interface {
<some code here>
}
Run Code Online (Sandbox Code Playgroud)
要实现上面的接口,类型需要字符串作为键.然后我可以编写一个泛型函数,它返回一个用于实现类型的键的排序列表.
这是我目前使用反射模块的最佳解决方案:
func SortedKeys(mapWithStringKey interface{}) []string {
keys := []string{}
typ := reflect.TypeOf(mapWithStringKey)
if typ.Kind() == reflect.Map && typ.Key().Kind() == reflect.String {
switch typ.Elem().Kind() {
case reflect.Int:
for key, _ := range mapWithStringKey.(map[string]int) {
keys = append(keys, key)
}
case reflect.String:
for key, _ := range mapWithStringKey.(map[string]string) {
keys = append(keys, key)
}
// ... add more cases as needed
default:
log.Fatalf("Error: SortedKeys() does not handle %s\n", typ) …Run Code Online (Sandbox Code Playgroud)