[解決済み] Goで既存の型に新しいメソッドを追加するには?
2022-04-23 12:07:21
質問
に便利なutilメソッドを追加したい。
gorilla/mux
Route型とRouter型。
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 フィールドを持つ新しい struct タイプを作成しますか?または何か他のもの?
どのように解決するのですか?
コンパイラが言及しているように、他のパッケージの既存の型を拡張することはできません。以下のように、独自のエイリアスやサブパッケージを定義することができます。
type MyRouter mux.Router
func (m *MyRouter) F() { ... }
または、オリジナルのルータを埋め込むことで実現できます。
type MyRouter struct {
*mux.Router
}
func (m *MyRouter) F() { ... }
...
r := &MyRouter{router}
r.F()
関連
-
[解決済み] Go モジュールのローカル リポジトリとして Artifactory を使用する方法
-
[解決済み] Goでfloat64をintに変換する
-
[解決済み] Goでマップにキーが含まれているかどうかを確認するには?
-
[解決済み] goで文字列の連結を効率的に行う方法
-
[解決済み] Goで複数行の文字列はどのように書くのですか?
-
[解決済み] 既存の静的クラスに拡張メソッドを追加することはできますか?
-
[解決済み] ゼロ終端のバイト配列を文字列に変換するにはどうすればよいですか?
-
[解決済み] Goでオブジェクトの型を見つけるには?
-
[解決済み] "宣言されているが使用されていない "という迷惑なエラーを回避する方法
-
[解決済み】スライスの最後の要素を取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Go モジュールのローカル リポジトリとして Artifactory を使用する方法
-
[解決済み] 構造体のマップのデフォルト値は何ですか?
-
[解決済み] GO言語:致命的なエラー:すべてのゴルーチンがスリープしている - デッドロック
-
[解決済み] Cgo: すみません、未実装です: 64ビットモードはコンパイルされていません。
-
[解決済み] go getとgo installの違いは何ですか?
-
[解決済み] go install` は `go.mod` にレコードを追加します。
-
[解決済み] インポートサイクル不可
-
[解決済み] Goのオプションのパラメータ?
-
eclipse+goclipseプラグイン+gdbによるgo言語開発デバッグ環境の構築 ---最終起動シーケンスでのエラー MIコマンドの実行に失敗しました。
-
パッケージ "github.com/gorilla/websocket" を見つけることができません。