使用 \`encoding/json\` 的默认值 golang 结构?

新手上路,请多包涵

如何将 Encoding 的默认值设置为“base64”?

 type FileData struct {
    UID string `json:"uid"`
    Size int `json:"size"`
    Content string `json:content`
    Encoding string `json:encoding`
    User string `json:"user"`
}

我试过了

Encoding string `json:encoding`= "base64" // Not working

原文由 Jagdish Idhate 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 573
2 个回答

你不能,因为在 Go 中类型没有构造函数。

相反,有一个显式初始化函数(或指针接收器上的方法)或构造函数/工厂函数(这些通常称为 New<TypeName> 所以你的将是 NewFileData )这将返回一个你的类型的初始化值。

总而言之,我觉得这看起来像是一个 XY 问题。从你的问题来看,如果没有解组,你似乎想在你的一个字段上有一个默认值。如果是这样,只需对从 JSON 解组的这种类型的值进行后处理,如果没有任何内容被解组为 Encodning 将其设置为您想要的任何默认值。

或者你可以考虑这种方法:

  1. 为您的字段设置自定义类型。

type EncodingMethod string 这样的东西应该可以。

  1. 为这种类型有一个自定义的 JSON 解组方法,它可以做任何它想做的处理。

原文由 kostix 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在初始化“FileData”时设置默认值

看我的例子:https: //play.golang.org/p/QXwDG7_mul

Page int 默认值为 33

 package main

import (
    "encoding/json"
    "fmt"
)

type Response2 struct {
    Page   int      `json:"page"`
    Fruits []string `json:"fruits"`
}

func main() {
    str := `{"fruits": ["apple", "peach"]}`
    res := Response2{Page: 33 /*Default value*/}
    json.Unmarshal([]byte(str), &res)
    fmt.Println(res)
}

原文由 Son Bui 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题