В моем коде мне нужна функция, которая возвращает упорядоченный фрагмент ключей с карты.
m1 := make(map[string]string)
m2 := make(map[string]int)
И теперь мне нужно вызвать функцию, передающую оба типа карт:
keys1 := sortedKeys(m1)
keys2 := sortedKeys(m1)
Проблема : Я должен написать две функции, потому что функция должна использовать карты двух разных типов. В то же время тело функции будет одинаковым в обоих случаях.
Вопрос: Как использовать одну реализацию для двух карт? Или есть какой-то другой способ решения проблемы элегантным способом?
Моя первая идея состояла в том, чтобы использовать map[string]interface{}
в качестве типа аргумента, но вы не можете назначить ни map[string]string
, ни map[string]int
Мой код:
func sortedKeys(m map[string]string) []string {
var keys []string
for key := range m {
keys = append(keys, key)
}
sort.Strings(keys)
return keys
}
Мне пришлось бы повторить тот же код, но для map[string]int
.