当我编译代码时,收到以下错误消息,不知道为什么会发生。有人可以帮我指出为什么吗?先感谢您。
不能使用 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
),但是您正在向它传递一个结构值。更改您的初始化函数以返回指针。
func (px *Paxos) InitializePaxosInstance(val interface{}) *PaxosInstance {
return &PaxosInstance {decided:false, value: val}
}
现在它返回一个指针。您可以使用变量的指针&
并且,如果您需要结构值本身,请再次取消引用它*
.
像这样的一行之后
x := &PaxosInstance{}
or
p := PaxosInstance{}
x := &p
的值类型x
is *PaxosInstance
。如果您需要的话,您可以将其取消引用回PaxosInstance
结构体值与
p = *x
您通常不想将结构体作为实际值传递,因为 Go 是按值传递的,这意味着它将复制整个内容。将结构体值与映射和切片一起使用通常会导致逻辑错误,因为如果您迭代它们或以其他方式引用它们(除了通过索引),就会生成副本。这取决于您的用例,但您的标识符Instance
会推断您希望避免重复和此类逻辑错误。
至于阅读编译器错误,您可以看到它告诉您什么。方式PaxosInstance
并输入*PaxosInstance
不一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)