如何覆盖匿名结构函数。
澄清我的意思请看下面的代码片段:
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函数,但它不起作用。
答案 0 :(得分:4)
由于Test
没有ServeHTTP
方法,因此您的测试服务器会使用Controller
来调用Controller.Execute()
。如果您希望它正常工作,请为ServeHTTP
类型定义Test
。
答案 1 :(得分:-1)
type Test struct {
Controller
}
Controller
没有ServeHTTP
方法,*Controller
方法。所以
type Test struct {
*Controller
}
我认为它会奏效。