gpt4 book ai didi

interface - 如何避免需要指针接收器的接口(interface)方法实现?

转载 作者:IT王子 更新时间:2023-10-29 01:24:58 27 4
gpt4 key购买 nike

考虑以下示例:http://play.golang.org/p/eAot_sVwND

package main

import "fmt"

type Incrementor interface {
Increment()
}

type Counter struct {
i int

Incrementor
}

func (c *Counter) Increment(){
c.i++
}

func main() {
var c Incrementor
c = &Counter{}
c.Increment()
fmt.Println(c)
}

不幸的是,我需要 c = &Counter{} 因为 Counter.Increment() 实现有一个指针接收器,否则 c.Increment()调用将无法修改 c.x 属性:

func (c Counter) Increment(){
c.i++ // no errors, but now we increment c.x having a copy of c as context
}

如何在 c = &Counter{} 上没有 & 的情况下使原始实现工作?换句话说,如何完全避免在 C.Increment 实现中需要指针接收器?

这只是一个小问题,但我认为在 Go 中可能不需要指针来做到这一点。

最佳答案

This is just a nit, but I think that maybe a pointer is not necessary to do that in Go.

考虑到 Go 使用传递所有内容,指针接收器是实现您想要的结果的自然方式。
这由 Go FAQ 支持:

First, and most important, does the method need to modify the receiver? If it does, the receiver must be a pointer.

你会在“Things I Wish Someone Had Told Me About Golang: pointers”中找到类似的结论

关于interface - 如何避免需要指针接收器的接口(interface)方法实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27341367/

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