【问题标题】:golang struct default value using bson使用 bson 的 golang 结构默认值
【发布时间】: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" 我该怎么做?

【问题讨论】:

    标签: go


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2017-01-02
        • 2020-06-16
        • 1970-01-01
        • 2019-03-14
        • 2013-02-24
        • 2010-10-19
        • 2014-01-17
        • 2016-09-19
        • 1970-01-01
        相关资源
        最近更新 更多