将地图的所有值转换为go中的字符串

将地图的所有值转换为go中的字符串,go,Go,我正在使用一个用go编写的应用程序,它获取一个键列表,并从数据中提取值(如果该键存在于数据中) 然而,这个函数只接受字符串值——不幸的是,我的数据同时包含数组和数字作为值(这无法更改,它来自Azure OIDC登录) 因此,与其抱怨,我倒不如卷起袖子,自己动手修好它(以前从未写过一行“go”) 这是原始函数 func extractMetadata(logger log.Logger, allClaims map[string]interface{}, claimMappings map[str

我正在使用一个用go编写的应用程序,它获取一个键列表,并从数据中提取值(如果该键存在于数据中)

然而,这个函数只接受字符串值——不幸的是,我的数据同时包含数组和数字作为值(这无法更改,它来自Azure OIDC登录)

因此,与其抱怨,我倒不如卷起袖子,自己动手修好它(以前从未写过一行“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:=值。(字符串)

因为这就是我得到错误的地方

如果我把这个改成

strValue,ok:=fmt.Sprintf(“%v”,value)
这样做(a)有效吗(b)安全吗

(代码已导入fmt)

围棋中还有更优雅的解决方案吗?

fmt.Sprintf(“%v”,value)将任何值安全地格式化为字符串。一个更简单的调用是
fmt.Sprint(value)
。这两个调用都使用类型的默认格式,该格式可能是您想要的格式,也可能不是您想要的格式。

fmt.Sprintf(“%v”,value)
将任何值安全地格式化为字符串。一个更简单的调用是
fmt.Sprint(value)
。这两个调用都使用类型的默认格式,该格式可能是您想要的格式,也可能不是您想要的格式。

value.(string)
正在执行类型断言类型转换 它检查
value
是否为字符串,并返回相同的字符串和布尔标志

要将接口转换为字符串,可以使用
Sprintf
对其进行格式化,该函数将返回单个字符串值

strValue:=fmt.Sprint(“%v”,值)

安全性将取决于您的应用程序。如果您以后可以解析数据并解释数字和数组的含义,那么您就可以了

由于它看起来像一个元数据存储来简单存储信息,格式化字符串应该很好。

value.(string)
正在执行类型断言而不是类型转换 它检查
value
是否为字符串,并返回相同的字符串和布尔标志

要将接口转换为字符串,可以使用
Sprintf
对其进行格式化,该函数将返回单个字符串值

strValue:=fmt.Sprint(“%v”,值)

安全性将取决于您的应用程序。如果您以后可以解析数据并解释数字和数组的含义,那么您就可以了


由于它看起来像一个元数据存储来简单存储信息,所以格式化字符串应该很好。

fmt.Sprintf(“%v”,value)
将任何值安全地格式化为字符串。一个更简单的调用是
fmt.Sprint(value)
。这两个电话都使用默认的类型格式,这可能是您想要的格式,也可能不是您想要的格式。非常感谢您的评论-如果您想将其添加为答案,我将接受!再次感谢
fmt.Sprintf(“%v”,value)
安全地将任何值格式化为字符串。一个更简单的调用是
fmt.Sprint(value)
。这两个电话都使用默认的类型格式,这可能是您想要的格式,也可能不是您想要的格式。非常感谢您的评论-如果您想将其添加为答案,我将接受!再次感谢