覆盖匿名结构函数

时间:2014-11-12 12:30:44

标签: go

如何覆盖匿名结构函数。

澄清我的意思请看下面的代码片段:

package base

import (
    "fmt"
    "net/http"
)

type Executer interface {
    Execute()
}

type Controller struct { }

func (self *Controller) Execute() {
    fmt.Println("Hello Controller")
}

func (self *Controller) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
    self.Execute()
}

现在我将Controller结构嵌入到Test结构中,也称为匿名

package base

import (
    "fmt"
    "net/http"
    "net/http/httptest"
    "testing"
)

type Test struct {
    Controller
}

func (self *Test) Execute() {
    fmt.Println("Hello Test")
}

func TestInheritance(t *testing.T) {
    ts := httptest.NewServer(&Test{})
    defer ts.Close()
    http.Get(ts.URL)
}

作为输出,我有“Hello Controller”,但预计“Hello Test”。你可以看到上面的代码,我重新实现了execute函数,但它不起作用。

2 个答案:

答案 0 :(得分:4)

由于Test没有ServeHTTP方法,因此您的测试服务器会使用Controller来调用Controller.Execute()。如果您希望它正常工作,请为ServeHTTP类型定义Test

答案 1 :(得分:-1)

type Test struct {
    Controller
}

Controller没有ServeHTTP方法,*Controller方法。所以

type Test struct {
    *Controller
}

我认为它会奏效。