登录
首页 >  Golang >  Go问答

如何在元帅中省略结构的条件字段

来源:stackoverflow

时间:2024-04-02 12:30:35 494浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何在元帅中省略结构的条件字段》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

存在mystruct结构。

type mystruct struct {
    code        int   `json:"code"`
    flags       uint8 `json:"flags"`
    optionfield int   `json:",omitempty"`
}

以下代码将其转换为 json。

f := MyStruct{Code:500, OptionField:41}
r, _ := json.Marshal(f)
fmt.Println(string(r)

我需要“optionfield”是可选的。有时它应该存在于 json 中,其值为 [0, 1, 2, 3, ] 之一。而在其他时间它应该从 json 中排除。

我的问题是:omitempty当值为零时会排除它,而int的默认值为零。有什么方法可以省略条件中的字段(例如:如果值为-1则省略)。或者有什么办法可以做到。


解决方案


您可以使用 *int 代替 int 并将指针值设置为 nil 以忽略此操作。

package main

import (
    "encoding/json"
    "fmt"
)

type MyStruct struct {
    Code        int   `json:"Code"`
    Flags       uint8 `json:"Flags"`
    OptionField *int  `json:",omitempty"`
}

func format(s MyStruct) string {
    r, _ := json.Marshal(s)
    return string(r)
}

func main() {
    f := MyStruct{Code: 500, Flags: 10, OptionField: new(int)}
    fmt.Println(format(f)) // {"Code":500,"Flags":10,"OptionField":0}
    f.OptionField = nil
    fmt.Println(format(f)) // {"Code":500,"Flags":10}
}

理论要掌握,实操不能落!以上关于《如何在元帅中省略结构的条件字段》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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