Go 无法将append(*pairs,Pair literal)(类型pairs)用作赋值中的类型*对

Go 无法将append(*pairs,Pair literal)(类型pairs)用作赋值中的类型*对,go,Go,我正在编写一个代码来处理仓库[item[batch,qty]]的组合,然后根据批次和数量之和对[batch,qty]进行分组。我的代码是: 包干管 进口fmt 键入清单结构{//而不是:map[string]map[string]Pairs 仓库串 项目字符串 批次对 } 类型对[]对 类型对结构{ 键串 值浮动64 } func main{ fmt.PrintlnHello,世界 var inventory=库存{}//或:新库存没有工作//仓库[项目[批次,数量]] 库存.仓库=DMM 存

我正在编写一个代码来处理仓库[item[batch,qty]]的组合,然后根据批次和数量之和对[batch,qty]进行分组。我的代码是:

包干管 进口fmt 键入清单结构{//而不是:map[string]map[string]Pairs 仓库串 项目字符串 批次对 } 类型对[]对 类型对结构{ 键串 值浮动64 } func main{ fmt.PrintlnHello,世界 var inventory=库存{}//或:新库存没有工作//仓库[项目[批次,数量]] 库存.仓库=DMM 存货。项目=头盔 inventory.Batches=appendinventory.Batches,对{Jan,10} inventory.Batches=appendinventory.Batches,对{Jan,30} inventory.Batches=appendinventory.Batches,成对{Feb,30} fmt.Printf%v\n,库存 inventory.Batches.group } func p*对群{ 总和:=makemap[string]float64 成对:=新成对 对于u,el:=范围*p{ 总和[标高键]=总和[标高键]+标高值 } fmt.Printf%v%T\n,求和,求和 对于k,v:=范围和{
pairs=append*pairs,Pair{k,v}/对于注释,有两个可能的答案:

将对定义为定义对而不是对的var对:=定义*对的newPairs

分配两侧的解引用对为:*对=附加*对,对{k,v}

因此,我现在的完整工作代码是:

包干管 进口fmt 键入清单结构{//而不是:map[string]map[string]Pairs 仓库串 项目字符串 批次对 } 类型对[]对 类型对结构{ 键串 值浮动64 } func main{ fmt.PrintlnHello,世界 var inventory=库存{}//或:新库存没有工作//仓库[项目[批次,数量]] 库存.仓库=DMM 存货。项目=头盔 inventory.Batches=appendinventory.Batches,对{Jan,10} inventory.Batches=appendinventory.Batches,对{Jan,30} inventory.Batches=appendinventory.Batches,成对{Feb,30} fmt.Printf%v\n,库存 结果:=inventory.Batches.group fmt.Printf%v%T\n,结果,结果 } func p*对群对{ 总和:=makemap[string]float64 成对:=新成对 //变量对 对于u,el:=范围*p{ 总和[标高键]=总和[标高键]+标高值 } 对于k,v:=范围和{ *pairs=append*pairs,Pair{k,v}//with pairs:=newPairs //pairs=appendpairs,Pair{k,v}//var pairs } 返回*对 } 输出为:

Hello, 世界
{DMM Helmet [{Jan 10} {Jan 30} {Feb 30}]}
[{Jan 40} {Feb 30}] main.Pairs

Program exited.

您忘了取消对的引用。为什么要首先使用指针?pairs:=newPairs。这里pairs的类型是*pairs。append将一个切片作为第一个参数。您可以改为执行var pairs pairs,然后pairs=appendpairs,pairs{k,v}。newType总是给出一个*type。请阅读更多@JimB with pairs=appendpairs,pairs{k,v}我得到的第一个附加参数必须是slice;have*Pairs感谢@poWar的解释,它现在正在工作。第一个解决方案是惯用且更有效的解决方案。没有理由分配代码中所示的对。
Hello, 世界
{DMM Helmet [{Jan 10} {Jan 30} {Feb 30}]}
[{Jan 40} {Feb 30}] main.Pairs

Program exited.