gpt4 book ai didi

dictionary - map接口(interface)指针方法接收者

转载 作者:IT王子 更新时间:2023-10-29 02:33:59 27 4
gpt4 key购买 nike

我有以下代码

http://play.golang.org/p/d-bZxL72az

package main

import "fmt"

type Variables struct {
sum uint64
highest uint64
}

type Data struct {
count uint64
mValue map[string]Variables
}

func (v Variables) Add(value Variables) Variables {
v.sum += value.sum
if v.highest == 0 {
v.highest = value.highest
} else if v.highest < value.highest {
v.highest = value.highest
}
return v
}

func (v *Variables) AddPointer(value Variables) {
v.sum += value.sum
if v.highest == 0 {
v.highest = value.highest
} else if v.highest < value.highest {
v.highest = value.highest
}
}

func main() {
var instances [2]Variables
instances[0] = Variables{sum: 5, highest: 3}
instances[1] = Variables{sum: 10, highest: 2}
var d Data
d.mValue = make(map[string]Variables)
for i:= 0; i < len(instances); i++ {
d.mValue["one"] = d.mValue["one"].Add(instances[i])
d.mValue["two"].AddPointer(instances[i])
}
fmt.Println(d.mValue["one"])
fmt.Println(d.mValue["two"])
}

我得到了错误

# command-line-arguments
/tmp/sandbox209565070/main.go:42: cannot call pointer method on d.mValue["two"]
/tmp/sandbox209565070/main.go:42: cannot take the address of d.mValue["two"]

(我想)我理解第二个错误cannot take address - 因为它是一个 map ,它不能获取地址(正确吗?)

是否也是第一个错误的原因(无法调用指针方法)?

有没有办法在映射中的结构上使用指针方法..

最佳答案

是的,同样的原因。为了调用带有指针接收器的方法,您首先需要有一个指针,或者您需要一个可寻址值,Go 会自动为您获取指针。

那么,您可以做的是将 mValue 设为 map[string]*Variables 而不是 map[string]Variables .然后,您将在映射中存储一个指向已分配、可保证寻址的 Variables 的指针,您将能够调用该指针上的方法。

关于dictionary - map接口(interface)指针方法接收者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494710/

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