当前位置: 首页 > 面试题库 >

无法在go中用作类型分配

蓟清野
2023-03-14
问题内容

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

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

要么

p := PaxosInstance{}
x := &p

的值类型x为now
*PaxosInstance。如果你曾经需要(无论何种原因),你可以取消对它的引用(按照指针实际值)回到一个PaxosInstance结构值与

p = *x

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

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



 类似资料:
  • 主要内容:类型断言的书写格式,使用类型分支判断基本类型,使用类型分支判断接口类型type-switch 流程控制的语法或许是Go语言中最古怪的语法。 它可以被看作是类型断言的增强版。它和 switch-case 流程控制代码块有些相似。 一个 type-switch 流程控制代码块的语法如下所示: 输出结构如下: Type Square *main.Square with value &{5} 变量 t 得到了 areaIntf 的值和类型, 所有 case 语句中列举的类型

  • 我对这个flutter简单图表代码有问题。在我尝试运行代码时显示此错误。有人能帮我吗...... 参数类型'List 这是代码示例:

  • 我对弗利特和我是新手;我一直在尝试开发一款带有PHP API后端的应用程序。在无数的答案和在线研究中,我无法找到解决我所面临问题的方法。我希望有人能告诉我我做错了什么。 我试图从API中获取数据,并将其显示在卡中。下面是我的代码: 希望能得到一些帮助。非常感谢。

  • 问题内容: 我是Go编程语言的新手,我有一个创建和解释器的任务,但是我遇到了以下问题: 我想将环境定义为: 但是我收到错误“无效的递归类型环境”。根据我的研究,我将父级更改为 Environment。但是现在,当我需要创建一个环境类型为var的新环境时,它会收到错误消息“无法将fun_Val.ds(环境类型)用作 环境值类型”。我正在如下创建环境: 我试图将这篇文章中的代码量限制在一定范围内,但是

  • 我从Antlr4语法生成了Go语言的解析器。 语法在这里:https://raw.githubusercontent.com/antlr/grammars-v4/master/solidity/solidity.g4 代码段: 会有什么问题?

  • 问题内容: 我正在阅读《 Go编程语言》中的类型断言,但不理解它们。 我了解有不同的方案: T是具体类型或接口 可以返回一个(确定值?)或两个(确定)值 这是我不明白的: 我为什么要使用它们? 他们到底返回什么? 我也用谷歌搜索这个话题,但仍然不明白。 问题答案: 一行: 断言这不是nil并且存储的值是type 。 我为什么要使用它们: 检查为零 检查它是否可转换(断言)为另一种类型 转换(断言)