覆盖匿名结构函数

如何覆盖匿名结构函数。


为了阐明我的意思,请查看以下代码片段:


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()

}

现在我将控制器结构嵌入到测试结构中,也称为匿名


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函数,但它不起作用。


九州编程
浏览 204回答 2
2回答

婷婷同学_

由于Test没有ServeHTTP方法,您的测试服务器使用Controller's,它调用Controller.Execute(). 如果你想让它正常工作,定义ServeHTTP为Test类型。

富国沪深

type Test struct {    Controller}Controller没有ServeHTTP方法但是*Controller有。所以type Test struct {    *Controller}我认为它会起作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go