如何使用接口中的方法修改struct中的字段?

时间:2014-06-05 19:36:04

标签: go

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

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

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

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

任何提示? (对不起英语和问题描述不好,还在学习。)

1 个答案:

答案 0 :(得分:6)

您需要使用指针,否则您不会修改基础结构: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()

}