使用 bson 的 golang 结构默认值
Posted
技术标签:
【中文标题】使用 bson 的 golang 结构默认值【英文标题】:golang struct default value using bson 【发布时间】:2019-06-20 22:40:42 【问题描述】:我正在寻找新结构的返回默认值,没有值,这是我当前的结构:
// Campaign represents a email campaign
type Campaign struct
ID bson.ObjectId `json:"id" bson:"_id"`
CampaignName string `json:"campaign_name" bson:"campaign_name"`
FromName []string `json:"from_name" bson:"from_name"`
FromEmail string `json:"from_email" bson:"from_email"`
ReplyEmail string `json:"reply_email" bson:"reply_email"`
Subject []string `json:"subject" bson:"subject"`
BodyText string `json:"body_text" bson:"body_text"`
Bodyhtml string `json:"body_html" bson:"body_html"`
SMTPList bson.ObjectId `json:"smtp_list" bson:"smtp_list"`
EmailList bson.ObjectId `json:"email_list" bson:"email_list"`
DateCreated time.Time `json:"date_created" bson:"date_created"`
DateUpdated time.Time `json:"date_updated" bson:"date_updated"`
DateSendFinish time.Time `json:"date_send_finish" bson:"date_send_finish"`
OwnerID bson.ObjectId `json:"owner_id" bson:"owner_id"`
Opens int `json:"opens" bson:"opens"`
Clicks int `json:"clicks" bson:"clicks"`
Status string `json:"status" bson:"status"`
我想返回 Status = "draft" 我该怎么做?
【问题讨论】:
【参考方案1】:// Campaign represents a email campaign
type Campaign struct
ID bson.ObjectId `json:"id" bson:"_id"`
CampaignName string `json:"campaign_name" bson:"campaign_name"`
FromName []string `json:"from_name" bson:"from_name"`
FromEmail string `json:"from_email" bson:"from_email"`
ReplyEmail string `json:"reply_email" bson:"reply_email"`
Subject []string `json:"subject" bson:"subject"`
BodyText string `json:"body_text" bson:"body_text"`
BodyHTML string `json:"body_html" bson:"body_html"`
SMTPList bson.ObjectId `json:"smtp_list" bson:"smtp_list"`
EmailList bson.ObjectId `json:"email_list" bson:"email_list"`
DateCreated time.Time `json:"date_created" bson:"date_created"`
DateUpdated time.Time `json:"date_updated" bson:"date_updated"`
DateSendFinish time.Time `json:"date_send_finish" bson:"date_send_finish"`
OwnerID bson.ObjectId `json:"owner_id" bson:"owner_id"`
Opens int `json:"opens" bson:"opens"`
Clicks int `json:"clicks" bson:"clicks"`
Status string `json:"status" bson:"status"`
你可以这样做
campaign.Status = "draft"
或者如果你想要某种条件
if true
campaign.Status = "draft"
else
campaign.Status = "sent"
【讨论】:
【参考方案2】:我找到了另一个帖子
一个可能的想法是编写单独的构造函数
// Something is the structure we work with
type Something struct
Text string
DefaultText string
// NewSomething create new instance of Something
func NewSomething(text string) Something
something := Something
something.Text = text
something.DefaultText = "default text"
return something
强制方法获取结构体(构造方法)。
一个好的设计是让你的类型不被导出,但提供一个导出的 像 NewMyType() 这样的构造函数,您可以在其中正确 初始化你的结构/类型。还返回一个接口类型而不是一个 具体类型,接口应该包含其他人想要的一切 与你的价值有关。你的具体类型必须实现它 当然是界面。
这可以通过简单地使类型本身不导出来完成。你可以 导出函数 NewSomething 甚至字段 Text 和 DefaultText,但只是不导出结构类型的东西
为您自己的模块自定义它的另一种方法是使用Config struct to set default values(链接中的选项5)不是一个好方法 不过。
Original Post
【讨论】:
以上是关于使用 bson 的 golang 结构默认值的主要内容,如果未能解决你的问题,请参考以下文章