douzhenchun6782 2019-01-27 00:24
浏览 949
已采纳

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

i need to convert type string to bson.ObjectId, this is my current code :

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{})
}

and this is my current error :

..\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

i need convert body.SmtpList type as *string in bson.ObjectId , how i can do this ?

  • 写回答

1条回答 默认 最新

  • dongtuo4723 2019-01-27 02:23
    关注

    According to the documentation, bson.ObjectId is defined as

    type ObjectId string
    

    Given that, you should be able to use

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

    That's a type conversion, which works because the underlying type of ObjectId is string.

    Note that you need to make sure that body.SmtpList isn't nil before doing this or your code will panic.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?