我有一个这样的结构体:
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"
}
我想转换字符串类型的值,预期结果:
cvssV3 = CvssV3{
"baseScore" : 4.3,
"attackVector" : "NETWORK",
"attackComplexity" : "LOW",
"privilegesRequired" : "LOW",
"userInteraction" : "NONE",
"scope" : "UNCHANGED",
"confidentialityImpact" : "NONE",
"integrityImpact" : "LOW",
"availabilityImpact" : "NONE"
}
如何处理?
每个字段使用字符串。
您可以使用反射库遍历结构体的字段。
st := reflect.TypeOf(cvssV3)
for i := 0; i < st.NumField(); i++ {
field := st.Field(i)
if reflect.TypeOf(field) == "string"{
// apply toUpper
}
}
使用反射包将字符串字段大写:
// 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()))
}
}
https://go.dev/play/p/xi7dp0ct6Ni