Saya ingin menambahkan metode util kenyamanan ke gorilla/mux
tipe Route dan 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)
}
tetapi kompiler memberitahu saya
Tidak dapat menentukan metode baru pada mux.Router tipe non-lokal
Jadi bagaimana saya mencapai ini? Apakah saya membuat tipe struct baru yang memiliki bidang mux.Rout anonim dan mux.Router? Atau sesuatu yang lain?
go
extension-methods
Daniel Robinson
sumber
sumber
“extension methods are not object-oriented”
) untuk C #, tetapi ketika melihatnya hari ini, saya langsung teringat antarmuka Go (dan pendekatannya untuk memikirkan kembali orientasi objek), dan kemudian saya punya pertanyaan yang sangat mirip ini.Jawaban:
Seperti yang disebutkan oleh kompiler, Anda tidak dapat memperluas tipe yang ada di paket lain. Anda dapat mendefinisikan alias atau sub paket Anda sendiri sebagai berikut:
atau dengan menyematkan router asli:
sumber
mux.Router
instances keMyRouter
s? mis. jika Anda memiliki perpustakaan yang mengembalikanmux.Router
tetapi Anda ingin menggunakan metode baru Anda?Saya ingin memperluas jawaban yang diberikan oleh @jimt di sini . Jawaban itu benar dan sangat membantu saya dalam menyelesaikan masalah ini. Namun, ada beberapa peringatan untuk kedua metode (alias, sematan) yang saya punya masalah.
Catatan : Saya menggunakan istilah orangtua dan anak, meskipun saya tidak yakin itu yang terbaik untuk komposisi. Pada dasarnya, parent adalah tipe yang ingin Anda modifikasi secara lokal. Child adalah tipe baru yang mencoba mengimplementasikan modifikasi itu.
Metode 1 - Jenis Definisi
Metode 2 - Penanaman ( dokumentasi resmi )
Ringkasan
Anda dapat melihat ini dalam kode berikut.
contoh kerja di taman bermain
sumber