一尘不染

无法在go中用作类型分配

go

编译代码时,收到以下错误消息,不确定为什么会发生。有人可以帮我指出原因吗?先感谢您。

不能在分配中使用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

}


阅读 272

收藏
2020-07-02

共1个答案

一尘不染

您的地图期望指向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结构值与

p = *x

通常,您不希望将结构作为实际值传递,因为Go是按值传递,这意味着它将复制整个内容。

至于阅读编译器错误,您可以看到它在告诉您什么。类型PaxosInstance和类型*PaxosInstance不相同。

2020-07-02