不能在赋值中使用 &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, ¤tFinalRow.Ingredients)
以便 json 解组直接在您的结构字段上工作。
我使用 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, ¤tFinalRow.Ingredients)
以便 json 解组直接在您的结构字段上工作。