当我编译我的代码时,我收到以下错误消息,不知道为什么会这样。有人可以帮我指出为什么吗?先感谢您。
不能在赋值中使用 px.InitializePaxosInstance(val)(PaxosInstance 类型)作为 *PaxosInstance 类型
type Paxos struct {
instance map[int]*PaxosInstance
}
type PaxosInstance struct {
value interface{}
decided bool
}
func (px *Paxos) InitializePaxosInstance(val interface{}) PaxosInstance {
return PaxosInstance {decided:false, value: val}
}
func (px *Paxos) PartAProcess(seq int, val interface{}) error {
px.instance[seq] = px.InitializePaxosInstance(val)
return nil
}
原文由 vkosyj 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的地图需要一个指向
PaxosInstance
(*PaxosInstance
) 的指针,但您正在向它传递一个结构值。更改 Initialize 函数以返回一个指针。现在它返回一个指针。您可以使用
&
变量的指针,如果您需要结构值本身,请使用*
再次取消引用它。在一行之后
或者
x
的值类型是*PaxosInstance
。如果你需要,你可以将它解引用回PaxosInstance
结构值您通常不希望将结构作为实际值传递,因为 Go 是按值传递的,这意味着它将复制整个结构。将结构值与映射和切片一起使用通常会导致逻辑错误,因为如果您迭代它们或以其他方式引用它们(除了通过索引),就会创建一个副本。这取决于您的用例,但您的标识符
Instance
会推断您希望避免重复和此类逻辑错误。至于阅读编译器错误,您可以看到它告诉您的内容。类型
PaxosInstance
和类型*PaxosInstance
不一样。