我使用GoLang v1.5.1,但收到这个奇怪的错误,或者我错过了一些东西。
在名为model的程序包中,我定义了以下内容:

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我错过了什么?是不是同一类型?

最佳答案

一个是指向 slice 的指针,一个是 slice 指针。
要解决问题,请将var ingredients []model.IngredientType更改为var ingredients []*model.IngredientType,使其与您的struct字段的类型匹配。然后将分配更改为currentFinalRow.Ingredients = ingredients而不使用“address-of”运算符。
(更短的)替代方法是err = json.Unmarshal(row.Ingredients, &currentFinalRow.Ingredients),以便json解组直接在您的struct字段上进行。

关于go - 不能在分配中使用&ingredients(类型* [] foo.bar)作为类型[] * foo.bar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63869332/

10-11 04:13