Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menambah Kaedah kepada Jenis Sedia Ada dalam Go?

Bagaimanakah Saya Boleh Menambah Kaedah kepada Jenis Sedia Ada dalam Go?

Susan Sarandon
Susan Sarandonasal
2025-01-03 10:07:39810semak imbas

How Can I Add Methods to Existing Types in Go?

Melanjutkan Jenis Sedia Ada dalam Go

Apabila cuba menambah kaedah tersuai pada jenis sedia ada daripada pakej yang diimport, anda mungkin menghadapi ralat yang menunjukkan bahawa anda tidak boleh menentukan kaedah baharu pada jenis bukan tempatan. Had ini berpunca daripada sistem jenis Go, yang tidak membenarkan pengubahsuaian kepada jenis yang ditakrifkan di tempat lain.

Untuk memintas sekatan ini, terdapat dua pendekatan utama:

  1. Tentukan Jenis Baharu dengan Medan Tanpa Nama: Ini melibatkan penciptaan jenis baharu yang membenamkan jenis asal sebagai medan tanpa nama. Anda kemudian boleh menambah kaedah tersuai pada jenis baharu anda.
type MyRoute struct {
    *mux.Route
}

func (m *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route {
    return m.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)
}
  1. Benamkan Jenis Sedia Ada: Daripada pembenaman tanpa nama, anda boleh membenamkan jenis sedia ada secara eksplisit menggunakan kata kunci benam. Ini menyediakan akses kepada medan dan kaedah jenis asal sambil membenarkan anda menentukan kaedah tambahan.
type MyRoute embed mux.Route

func (m *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route {
    return m.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

type MyRouter embed mux.Router

func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route {
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Kaedah kepada Jenis Sedia Ada dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn