当前位置: 首页 > 面试题库 >

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

齐承泽
2023-03-14
问题内容

我想在gorilla/muxRoute和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字段的新结构类型?或者是其他东西?


问题答案:

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

type MyRouter mux.Router

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

或嵌入原始路由器:

type MyRouter struct {
    *mux.Router
}

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

...
r := &MyRouter{router}
r.F()


 类似资料:
  • 我正在表任务中添加新列名标题。但我得到一个错误,该表中不存在此列。谁能帮我解决那个错误。这是我的密码: 然后添加此代码 到创建的新表文件

  • 这是我用于读取mime类型的类。我正在尝试添加一个新的mime类型(属性文件)并读取它。 这是我的类文件: 从这些文档中,我创建了一个自定义xml: 现在我如何添加到我的程序并阅读它。我必须创建一个解析器吗?我被困在这里了。

  • 问题内容: 我有以下索引的DataFrame,其中的命名列和行不是连续数字: 我想在现有数据框架中添加新列,并且不想更改数据框架中的任何内容(即,新列的长度始终与DataFrame相同)。 我尝试了不同的版本,但我没有得到我想要的,最多只是错误的结果。如何e在上面的示例中添加列? 问题答案: 使用原始的df1索引创建系列: 编辑2015年 有些人报告使用此代码。 但是,该代码仍可以在当前的熊猫0.

  • 我不知道如何使用Laravel框架将新列添加到现有的数据库表中。 我试图使用…编辑迁移文件。。。 在终端,我执行和。 如何添加新列?

  • 以下是firebase文档数据 我想向购买的id添加一个新的映射值。这是当前代码 但是使用此代码替换了map值,如何向现有map添加另一个map值 这样地