Я использую приложение, написанное на go, которое принимает список ключей и извлекает значения из данных, если этот ключ существует в данных.
Однако эта функция принимает только строковые значения - и, к сожалению, мои данные имеют как массивы, так и числа в качестве значений (это не может быть изменено, оно исходит из Azure OID C логина)
Поэтому вместо того, чтобы жаловаться, я подумал, что засучу рукава и попробую и исправлю это сам (никогда раньше не писал ни одной строчки "go")
итак, это исходная функция
func extractMetadata(logger log.Logger, allClaims map[string]interface{}, claimMappings map[string]string) (map[string]string, error) {
metadata := make(map[string]string)
for source, target := range claimMappings {
if value := getClaim(logger, allClaims, source); value != nil {
strValue, ok := value.(string)
if !ok {
return nil, fmt.Errorf("error converting claim '%s' to string", source)
}
metadata[target] = strValue
}
}
return metadata, nil
}
Я считаю, что это строка
strValue, ok := value.(string)
, поскольку именно здесь я получаю сообщение об ошибке.
Если бы я изменил это на
strValue, ok := fmt.Sprintf("%v",value)
, было бы это (a ) работать и (б) быть в безопасности? ..
(fmt уже импортирован кодом)
Доступны ли более элегантные решения в go?