go - 如何使用接口(interface)中的方法修改结构中的字段?

标签 go

我正在编写一个小项目来学习一些 Google Go,但经过几个小时的编码后,我发现有一个问题我自己无法解决,在互联网上也找不到。我的项目将包含很少的算法,这些算法对实现一个接口(interface)的变量进行操作。所有类型的共同点是我可以对它们进行评级并通过该评级进行比较,因此接口(interface)中定义的方法之一应该是 SetRating(x int) 问题是,因为 Go 正在复制值 - 我无法修改任何字段在里面。这是例子

http://play.golang.org/p/4nyxulwzNo

试图找出人们在这个约定中使用变通方法: http://play.golang.org/p/PUuOBZ4uM-

但我认为这个解决方案很丑陋,因为我需要在调用 func(转换类型)时知道我的接口(interface)的所有实现,并且真的想避免这种情况并编写一些通用代码来获得实现我的接口(interface)的任何类型,只知道每个实现都有方法 setRating(x int) 和 getRating(x int)。

有什么提示吗? (抱歉英文不好和问题描述,还在学习中。)

最佳答案

您需要使用指针,否则您不会修改底层结构:http://play.golang.org/p/l3X4gTSAnF

package main

type Setter interface {
    Set(x int)
    Print()
}

type S1 struct {
    X int
}

func (this *S1) Set(x int) {
    this.X = x
    println("Setting value")
}

func (this *S1) Print(){
    println(this.X)
}



func main() {
    var s1 Setter 
    s1 = &S1{}
    s1.Set(5)
    s1.Print()

}

关于go - 如何使用接口(interface)中的方法修改结构中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068779/

相关文章:

debugging - 如何在 GoLand 中设置调试?

golang 无法执行二进制文件 : Exec format error

go - 有什么方法可以使用 golang std 库来格式化日志(如下所述)?

go - func 关键字后的两个函数名称 - 它是什么?

json - 读取外部 JSON 文件

go - 发布一个 golang 模块 : Semantic versioning

go - `go get` 命令失败 : unrecognized import path "_/<path>"

angular - Angular 4 前端中的 CORS 问题与运行 go API 后端的 Google Cloud Endpoints

go - 在 "go build"之前设置一个环境变量

go - 如何从代码和测试中引用相关文件