为了账号安全,请及时绑定邮箱和手机立即绑定

Go是否允许为具有特定键类型的映射指定接口?

Go是否允许为具有特定键类型的映射指定接口?

Go
慕的地6264312 2021-05-13 18:27:15
我编写了一个函数,该函数将从map [string] Foo返回排序后的字符串片段。我很好奇创建通用例程的最佳方法是什么,该例程可以从以字符串为键的映射的任何类型返回经过排序的字符串切片。有没有一种使用接口规范的方法?例如,有什么方法可以执行以下操作:type MapWithStringKey interface {    <some code here>}要实现上面的接口,一种类型将需要字符串作为键。然后,我可以编写一个泛型函数,该函数返回用于实现类型的键的排序列表。这是我当前使用反射模块的最佳解决方案: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)        }        sort.Strings(keys)    } else {        log.Fatalln("Error: parameter to SortedKeys() not map[string]...")    }    return keys}单击以获取Go Playground版本即使在编译时,我也必须为每种受支持的类型编写类型断言,尽管我们应该知道mapWithStringKey参数的确切类型。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信