Dalam Go, melanjutkan jenis sedia ada daripada pakej berbeza tidak disokong secara langsung. Walau bagaimanapun, terdapat teknik alternatif untuk mencapai kefungsian yang serupa.
Salah satu pendekatan ialah mentakrifkan jenis baharu yang membenamkan jenis sedia ada sebagai medan tanpa nama. Ini membolehkan anda menentukan kaedah tambahan pada jenis baharu anda tanpa mengubah suai yang asal. Berikut ialah contoh:
type MyRoute struct { mux.Route } func (r *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route { return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
Pilihan lain ialah membenamkan secara langsung jenis sedia ada sebagai medan bernama dan menggunakan penuding untuk mengakses dan melanjutkan jenis terbenam.
type MyRouter struct { *mux.Router } func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route { return r.Router.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
Dalam sesetengah kes, ia mungkin boleh dibuat untuk membuat sambungan pakej yang menyediakan fungsi tambahan kepada jenis sedia ada. Walau bagaimanapun, ini memerlukan pengubahsuaian kod sumber pakej asal dan biasanya tidak disyorkan untuk perpustakaan kongsi.
Pendekatan yang sesuai bergantung pada keperluan khusus dan pengehadan projek anda. Jika anda perlu mengakses dan mengubah suai jenis sedia ada secara langsung, pembenaman mungkin sesuai. Pertimbangkan untuk menggunakan medan tanpa nama jika anda ingin menyembunyikan jenis asas daripada API. Terokai pakej sambungan jika anda mempunyai kebebasan untuk mengubah suai kod sumber asal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanjangkan Jenis Sedia Ada dalam Go Tanpa Mengubah Suai Kod Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!