将* string类型转换为bson.ObjectId类型

时间:2019-01-27 00:24:55

标签: go

我需要将类型字符串转换为bson.ObjectId, 这是我当前的代码:

type CampaignUpdateBody struct {
    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      *string    `json:"smtp_list_id" bson:"smtp_list"`
    EmailList     *string    `json:"email_list_id" bson:"email_list"`
}

// LetterTemplateUpdate updates some fields of the letter template.
func (s *Service) CampaignUpdate(c *gin.Context) {
    id := bson.ObjectIdHex(c.Param("id"))
    if !id.Valid() {
        c.JSON(http.StatusBadRequest, gin.H{"error": "id has wrong format"})
        return
    }

    var body CampaignUpdateBody
    if err := c.BindJSON(&body); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    token := c.MustGet(tokenKey).(*models.Token)

    params := storage.CampaignUpdateParams{}
    params.ID = id
    //..........................
    params.BodyText  = body.BodyText
    params.BodyHTML  = body.BodyHTML
    params.SmtpList  = body.SmtpList
    params.EmailList = body.EmailList

    stor := c.MustGet(storageKey).(storage.Storage)
    if err := stor.CampaignUpdate(token.UserID, params); err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }
    c.JSON(http.StatusOK, gin.H{})
}

这是我当前的错误:

..\httpservice\campaigns.go:134:19: cannot use body.SmtpList (type *string) as t
ype bson.ObjectId in assignment
..\httpservice\campaigns.go:135:19: cannot use body.EmailList (type *string) as
type bson.ObjectId in assignment

我需要将body.SmtpList类型转换为bson.ObjectId中的* string,我该怎么做?

1 个答案:

答案 0 :(得分:1)

根据文档,bson.ObjectId被定义为

type ObjectId string

鉴于此,您应该可以使用

params.SmtpList = bson.ObjectId(*body.SmtpList)

这是类型转换,之所以有效,是因为ObjectId的基础类型是string

请注意,在执行此操作之前,请确保body.SmtpList不是nil,否则您的代码会崩溃。