golang struct значение по умолчанию с использованием bson - PullRequest
0 голосов
/ 28 января 2019

Я ищу возвращаемое значение по умолчанию для новой структуры, без значения, это моя текущая структура:

// 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" Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 28 января 2019
// 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"`
}

Просто Вы можете сделать так

0 голосов
/ 28 января 2019

Мне удалось найти другой пост

Одна из возможных идей - написать отдельную функцию конструктора

// 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 для установкизначения по умолчанию (вариант 5 в ссылке) Однако не очень хороший способ.

Исходное сообщение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...