go 字符串拆分 split
2021-03-17 tech go 4 mins 1 图 1616 字
简单记录 golang 使用 regexp.MustCompile 进行字符串拆分的用法。
假设目前的输入值为:
"spec":{
"Container": {
"default.cpu": "200m",
"default.memory": "200Mi",
"defaultRequest.cpu": "100m",
"defaultRequest.memory": "100Mi",
"max.cpu": "2",
"max.memory": "1Gi",
"maxLimitRequestRatio.cpu": "5",
"maxLimitRequestRatio.memory": "4",
"min.cpu": "100m",
"min.memory": "3Mi"
},
"Pod": {
"max.cpu": "2",
"max.memory": "1Gi",
"maxLimitRequestRatio.cpu": "5",
"maxLimitRequestRatio.memory": "4",
"min.cpu": "100m",
"min.memory": "3Mi"
}
}
我们将 .
号前后的字符进行拆分,整合 key,append 最后输出为类似如下格式的 interface:
嵌套两个 for 循环即可完成。
func exchange(spec interface{}) interface{} {
var result []interface{}
for kind, u := range spec.(map[string]interface{}) {
limitsRule := make(map[string]interface{})
limitsRule["type"] = kind
for k, _ := range u.(map[string]interface{}) {
s := regexp.MustCompile("[.!?]").Split(k, 2)
limitsRule[s[0]] = nil
}
for k, v := range u.(map[string]interface{}) {
s := regexp.MustCompile("[.!?]").Split(k, 2)
var tmp map[string]string
if limitsRule[s[0]] == nil {
tmp = make(map[string]string)
} else {
tmp = limitsRule[s[0]].(map[string]string)
}
tmp[s[1]] = v.(string)
limitsRule[s[0]] = tmp
}
result = append(result, limitsRule)
}
return result
}