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

cannot use &ingredients (type *[]foo.bar) as type []*foo.bar in assignment

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

我错过了什么吗?不是同款吗?

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

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

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