Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memanjangkan Jenis Sedia Ada dalam Go Apabila Sambungan Terus Tidak Disokong?
Dalam Go, melanjutkan jenis sedia ada yang ditakrifkan dalam pakej luaran tidak disokong secara langsung. Walau bagaimanapun, terdapat penyelesaian untuk mencapai hasil yang serupa.
Mari kita pertimbangkan contoh yang diberikan dalam soalan:
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) }
Apabila cuba menyusun kod ini, seseorang menghadapi ralat: "Tidak dapat menentukan kaedah baharu pada mux.Router jenis bukan tempatan". Ini kerana Go tidak membenarkan sambungan terus jenis daripada pakej luaran.
Penyelesaian 1: Tentukan Jenis Pembungkus
Satu penyelesaian adalah dengan menentukan struct pembungkus yang membenamkan jenis asal dan menyediakan kaedah yang dikehendaki. Contohnya:
type MyRoute struct { *mux.Route } func (r *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route { return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) } type MyRouter struct { *mux.Router } func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route { return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
Penyelesaian 2: Jenis Penegasan
Pilihan lain ialah menggunakan penegasan jenis untuk menukar jenis asal kepada antara muka{} dan kemudian kepada jenis tersuai yang menyediakan kaedah yang diingini. Contohnya:
func (r interface{}) Subroute(tpl string, h http.Handler) *mux.Route { switch v := r.(type) { case *mux.Route: return v.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) case *mux.Router: return v.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) default: panic("unreachable") } }
Nota: Penyelesaian ini mungkin memperkenalkan kerumitan tambahan dan harus digunakan dengan berhati-hati. Jika boleh, sebaiknya elakkan mengubah suai jenis luaran dan sebaliknya tentukan jenis anda sendiri yang membungkus atau memanjangkan fungsi yang anda perlukan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanjangkan Jenis Sedia Ada dalam Go Apabila Sambungan Terus Tidak Disokong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!