将地图的所有值转换为go中的字符串
我正在使用一个用go编写的应用程序,它获取一个键列表,并从数据中提取值(如果该键存在于数据中) 然而,这个函数只接受字符串值——不幸的是,我的数据同时包含数组和数字作为值(这无法更改,它来自Azure OIDC登录) 因此,与其抱怨,我倒不如卷起袖子,自己动手修好它(以前从未写过一行“go”) 这是原始函数将地图的所有值转换为go中的字符串,go,Go,我正在使用一个用go编写的应用程序,它获取一个键列表,并从数据中提取值(如果该键存在于数据中) 然而,这个函数只接受字符串值——不幸的是,我的数据同时包含数组和数字作为值(这无法更改,它来自Azure OIDC登录) 因此,与其抱怨,我倒不如卷起袖子,自己动手修好它(以前从未写过一行“go”) 这是原始函数 func extractMetadata(logger log.Logger, allClaims map[string]interface{}, claimMappings map[str
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)
。这两个电话都使用默认的类型格式,这可能是您想要的格式,也可能不是您想要的格式。非常感谢您的评论-如果您想将其添加为答案,我将接受!再次感谢