golang topper结构字符串字段



我有一个这样的结构体:

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

最新更新