为了账号安全,请及时绑定邮箱和手机立即绑定

不能在赋值中使用 &ingredients (type *[]foo.bar) 作为

不能在赋值中使用 &ingredients (type *[]foo.bar) 作为

Go
莫回无 2022-06-27 16:58:43
我使用 GoLang v1.5.1,我收到了这个奇怪的错误,或者我错过了一些东西。在一个名为模型的包中,我定义了以下内容:type SearchResultRow struct {    ID          int               `json:"id"`    Name        string            `json:"name"`    Type        string            `json:"type"`    Notes       *string           `json:"notes"`    AddedBy     *string           `json:"added_by"`    Source      *string           `json:"source"`    Ratings     *int              `json:"ratings"`    IVer        *int              `json:"i_ver"`    Ingredients []*IngredientType `json:"ingredients"`    Accessories []*AccessoryType  `json:"accessories"`}type AccessoryType struct {    ID   int    `json:"id"`    Name string `json:"name"`    IVer *int   `json:"i_ver"`}type IngredientType struct {    Name   string  `json:"name"`    Flavor *string `json:"flavor"`    ItID   *int    `json:"it_id"`    IID    *int    `json:"i_id"`    IVer   *int    `json:"i_ver"`}在我的主要代码中    var currentFinalRow model.SearchResultRow    var ingredients []model.IngredientType    ...    err = json.Unmarshal(row.Ingredients, &ingredients)    if err != nil {        return nil, err    }    currentFinalRow.Ingredients = &ingredients我得到了错误:cannot use &ingredients (type *[]model.IngredientType) as type []*model.IngredientType in assignment我错过了什么?不是同一种吗?
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

一个是指向切片的指针,一个是指针切片。

要解决问题,请更改var ingredients []model.IngredientTypevar ingredients []*model.IngredientType使其与您的结构字段的类型相匹配。然后将赋值更改为currentFinalRow.Ingredients = ingredients不使用“address-of”运算符。

一个(更短的)替代方案是err = json.Unmarshal(row.Ingredients, &currentFinalRow.Ingredients)让 json 解组直接在您的 struct 字段上工作。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信