go - golang struct default value using bson
问题描述
I looking return default value for new struct, without value, this is my current struct :
// 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"`
}
I want to return Status = "draft" How i can do this ?
解决方案
我能够找到另一个帖子
一种可能的想法是编写单独的构造函数
// 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 结构来设置默认值(链接中的选项 5)虽然不是一个好方法。
推荐阅读
- android-studio - 如何在谷歌地图中使用标记和折线的中点绘制多边形
- javascript - 我可以为多个变量分配相同的值,而每个变量/赋值没有一行吗?
- ios - 将使用 UIImagePickerController 拍摄的图像以 HEIC 格式保存到照片卷
- sql-server - 将单行数据插入多行表格
- javascript - RollupJS 只生成 index.js
- sql - SQL 查询 2 限制
- java - 将总和作为值放入哈希图中
- elasticsearch - 无法在 logstash 输出中执行脚本
- android - 使用 Android AVD 进行系统应用程序/服务开发
- jmeter - 为 jmeter 中的每个请求生成身份验证令牌