如何获取类型函数的方法字段(Go)

时间:2014-11-28 19:33:56

标签: methods go

我想知道是否可以使用反射或其他方法从类型函数中获取方法字段。    我试图解决的问题是我有一个方法接受特定类型的函数,但我需要实际传输不同的类型,并根据提供的类型执行操作。我知道我可以使用interface {}值作为接收器,但我不想放松对调用函数的类型检查(“GetIt”)

package main

type ttp struct {
    Coupons string
}

func (m ttp) GetIt(x string) {
    if m.Coupons != "" {
        print(m.Coupons)
    }
}

func calculate(mth func(s string)){
    //perform calculations and update the Coupon field
    mth.Cupons = "one coupon" // is not working :(
    // execute it again with the processed value
    mth.GetIt() // is not working


}
func main() {
    m := ttp{Coupons: "something"}
    calculate(m.GetIt)
}

Play

1 个答案:

答案 0 :(得分:0)

这不能回答你的确切问题,但它应该解决你的问题并清理逻辑:在类型中推送计算方法并使用接口

https://play.golang.org/p/On_AigRYW6

package main

import "fmt"

type Computer interface {
    Compute(string)
}

type myp struct {
    Coupons string
}

// myp implements Computer
func (m *myp) Compute(x string) {
    m.GetIt(x)
    fmt.Println("myp")

}

type ttp struct {
    Various string
}

// ttp implements Computer
func (m *ttp) Compute(x string) {
    m.GetIt(x)
    fmt.Println("ttp")
}

func (m myp) GetIt(x string) {}
func (m ttp) GetIt(x string) {}

func main() {
    m := &myp{Coupons: "something"}
    t := &ttp{Various: "various stuff"}
    var stuff = []Computer{m, t}
    for _, c := range stuff {
        c.Compute("s")
    }
}