dongzhijing8202 2017-05-10 19:04
浏览 47
已采纳

无法在go中用作类型分配

when I compile my code, I get the following error message, not sure why it happens. Can someone help me point why? Thank you in advance.

cannot use px.InitializePaxosInstance(val) (type PaxosInstance) as type *PaxosInstance in assignment

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 

}

  • 写回答

2条回答 默认 最新

  • douqianzha6213 2017-05-10 19:10
    关注

    Your map is expecting a pointer to a PaxosInstance (*PaxosInstance), but you are passing a struct value to it. Change your Initialize function to return a pointer.

    func (px *Paxos) InitializePaxosInstance(val interface{}) *PaxosInstance {
        return &PaxosInstance {decided:false, value: val}
    }
    

    Now it returns a pointer. You can take the pointer of a variable using & and (should you ever need to) dereference it again with *. After a line like

    x := &PaxosInstance{} 
    

    or

    p := PaxosInstance{}
    x := &p
    

    the value type of x is now *PaxosInstance. And if you ever need to (for whatever reason), you can dereference it (follow the pointer to the actual value) back into a PaxosInstance struct value with

    p = *x
    

    You usually do not want to pass structs around as actual values, because Go is pass-by-value, which means it will copy the whole thing.

    As for reading the compiler errors, you can see what it was telling you. The type PaxosInstance and type *PaxosInstance are not the same.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题