加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.cn/)- 智能边缘云、设备管理、数据工坊、研发安全、容器安全!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Golang怎么展开struct转换

发布时间:2023-06-09 16:02:41 所属栏目:PHP教程 来源:互联网
导读:   这篇文章主要介绍了Golang怎么进行struct转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang怎么进行struct转换文章都会有所收获,下面我们一起
  这篇文章主要介绍了Golang怎么进行struct转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang怎么进行struct转换文章都会有所收获,下面我们一起来看看吧。
 
  定义结构体
 
  首先,我们先来定义一个结构体:
 
  type Person struct {
 
      Name    string
 
      Age     int
 
      Address Address
 
  }
 
  type Address struct {
 
      Province string
 
      City     string
 
      Street   string
 
  }
 
  在以上的代码中,我们定义了两个结构体,一个是Person,它包含了Name、Age和Address三个属性,其中Address是一个嵌套的结构体。
 
  将结构体转成 JSON
 
  在实际的开发中,我们经常需要将结构体转成JSON格式。Golang中内置的encoding/json包提供了方便的JSON编码和解码功能,我们可以使用该包将结构体转成JSON格式的数据。
 
  import "encoding/json"
 
  func main() {
 
      person := Person{Name: "Tom", Age: 18, Address: Address{Province: "Beijing", City: "Beijing", Street: "Wudaokou"}}
 
      jsonBytes, err := json.Marshal(person)
 
      if err != nil {
 
          fmt.Println(err)
 
      }
 
      fmt.Println(string(jsonBytes))
 
  }
 
  以上代码中,我们先创建了一个Person实例,然后调用json.Marshal()将该实例转成了JSON格式的数据。在转换过程中,如果存在错误,将会输出错误信息,否则输出转换后结果的字符串。
 
  将JSON转成结构体
 
  除了将结构体转成JSON格式,我们还经常需要将JSON格式的数据转成结构体。在上面的例子中,我们已经将person转成了JSON格式,现在我们来将JSON数据转成结构体。
 
  jsonStr := `{"Name":"Tom","Age":18,"Address":{"Province":"Beijing","City":"Beijing","Street":"Wudaokou"}}`
 
  person := Person{}
 
  err := json.Unmarshal([]byte(jsonStr), &person)
 
  if err != nil {
 
      fmt.Println(err)
 
  }
 
  fmt.Println(person)
 
  在以上代码中,我们先将JSON格式的数据定义为jsonStr,然后调用json.Unmarshal()将其转成Person结构体。同样的,在转换过程中如果出现错误,输出错误信息,否则输出转换后的Person结构体实例。
 
  字段转换
 
  有些情况下,数据的字段名和结构体中字段名不一致,这时候需要进行字段转换。Golang中,可以通过将结构体的属性名修改为Tag的方式实现。
 
  type Person struct {
 
      Name    string `json:"name"`
 
      Age     int    `json:"age"`
 
      Address Address
 
  }
 
  type Address struct {
 
      Province string `json:"province"`
 
      City     string `json:"city"`
 
      Street   string `json:"street"`
 
  }
 
  以上代码中,我们在结构体属性名前添加了json tag,它指定了JSON的属性名。在转换过程中,如果tag存在,将以tag为准。
 
  结构体中存在数组
 
  在结构体中,可能会存在包含数组的属性。对于这种情况,我们需要对数组进行遍历操作。
 
  type Person struct {
 
      Name    string    `json:"name"`
 
      Age     int       `json:"age"`
 
      Address []Address `json:"address"`
 
  }
 
  type Address struct {
 
      Province string `json:"province"`
 
      City     string `json:"city"`
 
      Street   string `json:"street"`
 
  }
 
  func main() {
 
      jsonStr := `{"name":"Tom","age":18,"address":[{"province":"Beijing","city":"Beijing","street":"Wudaokou"},{"province":"Henan","city":"Kaifeng","street":"Longting"}]}`
 
      person := Person{}
 
      err := json.Unmarshal([]byte(jsonStr), &person)
 
      if err != nil {
 
          fmt.Println(err)
 
      }
 
      for _, a := range person.Address {
 
          fmt.Println(a.Province, a.City, a.Street)
 
      }
 
  }
 
  以上代码中,Person结构体中包含了一个Address的数组,我们需要对其进行遍历。在转换过程中,我们可以通过Unmarshal将JSON格式的数据转成Person结构体实例,然后通过对Address数组进行遍历操作,输出每个Address实例的Province、City和Street属性。
 

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章