繁体   English   中英

golang ToUpper 结构字符串字段

[英]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()))
    }
}

https://go.dev/play/p/xi7dp0ct6Ni

您可以使用反射库遍历结构的字段。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM