代码之家  ›  专栏  ›  技术社区  ›  Cory Klein

在类型结构上包装多个方法中的一个?

go
  •  2
  • Cory Klein  · 技术社区  · 7 年前

    type Foo struct {
    }
    
    func (f *Foo) method1() int { ... }
    func (f *Foo) method2() int { ... }
    func (f *Foo) method3() int { ... }
    // ... and so on
    

    我真的想在我打电话的时候采取一些具体的行为 method1

    func (f *Foo) method1Wrapper() int {
        incrementCounter()
        return f.method1()
    }
    

    但这增加了 相反 method1()

    type Foo2 struct {
        Foo
    }
    
    func (f *Foo2) method1() int {
        incrementCounter()
        return f.Foo.method1()
    }
    

    method2 method3 Foo 我得改变我所有的习惯 Foo2

    可以直接修补或包装吗 Foo.method1() 没有

    1 回复  |  直到 7 年前
        1
  •  3
  •   JimB    7 年前

    embedding

    type Foo struct {
    }
    
    func (f *Foo) method1() int { return 1 }
    func (f *Foo) method2() int { return 2 }
    func (f *Foo) method3() int { return 3 }
    
    type Foo2 struct {
        *Foo
    }
    
    func (f Foo2) method1() int {
        fmt.Println("WRAPPED")
        return f.Foo.method1()
    }
    

    Foo2 设置的方法与 Foo method1 ,它显式调用 Foo.method1

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