我需要将类型字符串转换为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,我该怎么做?
答案 0 :(得分:1)
根据文档,bson.ObjectId
被定义为
type ObjectId string
鉴于此,您应该可以使用
params.SmtpList = bson.ObjectId(*body.SmtpList)
这是类型转换,之所以有效,是因为ObjectId
的基础类型是string
。
请注意,在执行此操作之前,请确保body.SmtpList
不是nil
,否则您的代码会崩溃。