猿问

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

我使用 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


我错过了什么?不是同一种吗?


莫回无
浏览 112回答 1
1回答

Helenr

一个是指向切片的指针,一个是指针切片。要解决问题,请更改var ingredients []model.IngredientType为var ingredients []*model.IngredientType使其与您的结构字段的类型相匹配。然后将赋值更改为currentFinalRow.Ingredients = ingredients不使用“address-of”运算符。一个(更短的)替代方案是err = json.Unmarshal(row.Ingredients, &currentFinalRow.Ingredients)让 json 解组直接在您的 struct 字段上工作。
随时随地看视频慕课网APP

相关分类

Go
我要回答