编译代码时,收到以下错误消息,不确定为什么会发生。有人可以帮我指出原因吗?先感谢您。
不能在分配中使用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
}
您的地图期望指向PaxosInstance(*PaxosInstance)的指针,但是您正在向其传递结构值。更改您的初始化函数以返回一个指针。
PaxosInstance
*PaxosInstance
func (px *Paxos) InitializePaxosInstance(val interface{}) *PaxosInstance { return &PaxosInstance {decided:false, value: val} }
现在,它返回一个指针。您可以使用&和获取(如果您需要)用再次取消引用变量的指针*。经过像
&
*
x := &PaxosInstance{}
要么
p := PaxosInstance{} x := &p
的值类型x为now *PaxosInstance。如果你曾经需要(无论何种原因),你可以取消对它的引用(按照指针实际值)回到一个PaxosInstance结构值与
x
p = *x
通常,您不希望将结构作为实际值传递,因为Go是按值传递,这意味着它将复制整个内容。
至于阅读编译器错误,您可以看到它在告诉您什么。类型PaxosInstance和类型*PaxosInstance不相同。