gpt4 book ai didi

go - 不能用作 go 中的分配类型

转载 作者:IT老高 更新时间:2023-10-28 13:09:59 24 4
gpt4 key购买 nike

当我编译我的代码时,我收到以下错误消息,不知道为什么会这样。有人可以帮我指出为什么吗?提前谢谢你。

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

}

最佳答案

您的 map 需要一个指向 PaxosInstance (*PaxosInstance) 的指针,但您正在向它传递一个结构值。更改 Initialize 函数以返回指针。

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

现在它返回一个指针。您可以使用 & 获取变量的指针,如果您需要结构值本身,请使用 * 再次取消引用它。

在一行之后

x := &PaxosInstance{} 

p := PaxosInstance{}
x := &p

x 的值类型是*PaxosInstance。如果需要,您可以使用

将其解引用回 PaxosInstance 结构值
p = *x

您通常不希望将结构体作为实际值传递,因为 Go 是按值传递的,这意味着它将复制整个内容。将结构值与映射和 slice 一起使用通常会导致逻辑错误,因为如果您迭代它们或以其他方式引用它们(通过索引除外),则会生成副本。这取决于您的用例,但您的标识符 Instance 会推断您希望避免重复和此类逻辑错误。

至于阅读编译器错误,您可以查看它告诉您的内容。 PaxosInstance 类型和 *PaxosInstance 类型不一样。

关于go - 不能用作 go 中的分配类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43900806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com