登录
首页 >  Golang >  Go问答

使用 Golang 在运行时对结构体的字段集进行重新组合

来源:stackoverflow

时间:2024-02-21 20:24:24 483浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《使用 Golang 在运行时对结构体的字段集进行重新组合》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

假设我有一个像这样的结构(虚拟示例):

type animal struct {
   name string
   weight int
   islandanimal boolean
   family
}

type family struct {
   name string
   type string
}

现在我想要实现的是这样的:

var a animal = ....
bys, err := json.marshal(a, []string{"name", "family.name"})

一旦打印bys应该看起来像这样:

{
   "name": "Lion"
   "family" : {
      "name" : "Felines"
   }
}

因此,我可以传递一个字符串切片,该切片引用我想要在最终字符串中实际编组的字段。

标准库或第三方库中是否存在这样的东西?

注意:这是我可以根据另一个答案做的事情: https://go.dev/play/p/xvb83zoxpmb 这会不会给以后带来麻烦?


正确答案


您可以对字段进行注释,以指定它在 json 中的显示方式以及空时是否需要省略。 https://pkg.go.dev/encoding/json#Marshal

这是一个工作代码。 https://pkg.go.dev/encoding/json#Marshal

package main

import (
    "encoding/json"
    "fmt"
)

type Animal struct {
    Name         string `json:"name,omitempty"`
    Weight       int    `json:"weight,omitempty"`
    IsLandAnimal bool   `json:"IsLandAnimal,omitempty"`
    Family       Family `json:"Family,omitempty"`
}

type Family struct {
    Name       string `json:"Name,omitempty"`
    Familytype string `json:"Familytype,omitempty"`
}

func main() {
    a := Animal{Family: Family{Name: "Felines"}, Name: "Lion"}
    bys, _ := json.Marshal(a)
    fmt.Println(string(bys))
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《使用 Golang 在运行时对结构体的字段集进行重新组合》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>