[英]golang ToUpper struct string fields
我有一个这样的结构:
type CvssV3 struct {
BaseScore *float32 `json:"baseScore"`
AttackVector *string `json:"attackVector"`
AttackComplexity *string `json:"attackComplexity"`
PrivilegesRequired *string `json:"privilegesRequired"`
UserInteraction *string `json:"userInteraction"`
Scope *string `json:"scope"`
ConfidentialityImpact *string `json:"confidentialityImpact"`
IntegrityImpact *string `json:"integrityImpact"`
AvailabilityImpact *string `json:"availabilityImpact"`
}
cvssV3 = CvssV3{
"baseScore" : 4.3,
"attackVector" : "Network",
"attackComplexity" : "Low",
"privilegesRequired" : "Low",
"userInteraction" : "None",
"scope" : "Unchanged",
"confidentialityImpact" : "None",
"integrityImpact" : "Low",
"availabilityImpact" : "None"
}
我想 ToUpper 字符串类型值,预期结果:
cvssV3 = CvssV3{
"baseScore" : 4.3,
"attackVector" : "NETWORK",
"attackComplexity" : "LOW",
"privilegesRequired" : "LOW",
"userInteraction" : "NONE",
"scope" : "UNCHANGED",
"confidentialityImpact" : "NONE",
"integrityImpact" : "LOW",
"availabilityImpact" : "NONE"
}
如何处理?
每个字段都使用 strings.ToUpper 是不优雅的
使用reflect package 将字符串字段大写:
// Get a modifiable reflect value for cvssV3.
v := reflect.ValueOf(&cvssV3).Elem()
// For each field ...
for i := 0; i < v.NumField(); i++ {
f := v.Field(i)
// If field is a string, then UPPER.
if f.Kind() == reflect.String {
f.SetString(strings.ToUpper(f.String()))
}
}
您可以使用反射库遍历结构的字段。
st := reflect.TypeOf(cvssV3)
for i := 0; i < st.NumField(); i++ {
field := st.Field(i)
if reflect.TypeOf(field) == "string"{
// apply toUpper
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.