我想给gorilla/mux
Route和Router类型添加一个方便的util方法:
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)
}
但编译器告诉我
无法在非本地类型mux.Router上定义新方法
那么我该怎么做呢?我是创建一个新的结构类型,它有一个匿名的mux.Route和mux.Router字段呢?还是别的什么?
3条答案
按热度按时间uxhixvfz1#
正如编译器提到的,你不能扩展另一个包中的现有类型,你可以定义你自己的类型,它由原始类型支持,如下所示:
或者通过嵌入原始路由器:
h5qlskok2#
我想详细说明一下@jimt here给出的答案。这个答案是正确的,并且极大地帮助了我解决这个问题。但是,对于我遇到麻烦的两个方法(alias,embed),有一些警告。
方法1 -类型定义
方法2 -包埋(官方文件)
总结
您可以在下面的代码中看到这一点。
working example on the playground
dkqlctbz3#
扩展其他答案之一,在我的例子中,父对象是一个数组,如果你想添加方法,但同时又想访问父方法,那么你必须在定义类型时换行,在声明变量时换行: