如何在现有类型中添加新方法?

我想添加一个方便util方法到gorilla / mux路由和路由器类型:

package util

import(
    "net/http"
    "github.com/0xor1/gorillaseed/src/server/lib/mux"
)

func (r *mux.Route) Subroute(tpl string, h http.Handler) *mux.Route{
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

func (r *mux.Router) Subroute(tpl string, h http.Handler) *mux.Route{
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

但编译器通知我

Cannot define new methods on non-local type mux.Router

那么我该如何实现呢?我创建一个新的结构类型,它有一个匿名的mux.Route和mux.Router字段?或者是其他东西?

正如编译器提到的,你不能扩展另一个包中的现有类型。您可以如下定义自己的别名或子包:

type MyRouter mux.Router

func (m *MyRouter) F() { ... }

或通过嵌入原始路由器:

type MyRouter struct {
    *mux.Router
}

func (m *MyRouter) F() { ... }

...
r := &MyRouter{router}
r.F()
翻译自:https://stackoverflow.com/questions/28800672/how-to-add-new-methods-to-an-existing-type-in-go

转载注明原文:如何在现有类型中添加新方法?