Go tidak memahami cara http.Server Handler memanggil fungsi yang dilampirkan pada struct kosong

WBOY
Lepaskan: 2024-02-10 16:00:11
ke hadapan
581 orang telah melayarinya

Go 不理解 http.Server Handler 如何调用附加到空结构的函数

editor php Banana ada di sini untuk menjawab soalan tentang bahasa Go: Go tidak memahami cara http.Server Handler memanggil fungsi yang dilampirkan pada struktur kosong. Dalam bahasa Go, http.Server ialah struktur yang digunakan untuk memproses permintaan HTTP, dan medan Pengendali ialah jenis antara muka. Jenis antara muka ialah jenis khas yang mentakrifkan satu set kaedah. Apabila kita menetapkan fungsi kepada medan Pengendali, bahasa Go akan menggunakan mekanisme pantulan untuk memanggil fungsi tersebut. Walau bagaimanapun, jika kita melampirkan fungsi pada struktur kosong, bahasa Go tidak akan memahami cara memanggil fungsi dengan betul. Ini kerana apabila kaedah dipanggil pada struktur kosong, contoh objek sebenar tidak boleh diperolehi. Untuk menyelesaikan masalah ini, kita boleh menggunakan penutupan atau kaedah dengan penerima.

Kandungan soalan

Saya mempunyai kod untuk pelayan web yang ringkas tetapi saya tidak faham kod ini:

Pengendali: app.routes(),

const webport = "80"

type config struct {}

func main() {

    app := config{}
    log.printf("starting broker service on port %s\n",webport)
    srv := &http.server{
        addr: fmt.sprintf(":%s",webport),
        handler:app.routes(),
    }

    err := srv.listenandserve()
    if(err != nil) {
        log.panic(err)
    }
}
Salin selepas log masuk

Dalam fail laluan:

func (app *config) routes() http.handler {
    mux := chi.newrouter()
    mux.use(cors.handler(cors.options{
        allowedorigins: []string{"http://*","https://*"},
        allowedmethods: []string{"get", "post", "delete","put","options"},
        allowedheaders: []string{"accept","authorization","content-type","x-csrf-token"},
        exposedheaders: []string{"link"},
        allowcredentials:true,
        maxage:300,
    }))

    mux.use(middleware.heartbeat("/ping"))
    mux.post("/",app.broker)

    return mux
}
Salin selepas log masuk

Ini adalah fungsi route() yang dipanggil apabila permintaan diterima, Tetapi bagaimana laluan() ini tahu dicetuskan apabila ia dilampirkan pada struct kosong?

app := Config{}
Salin selepas log masuk

Di manakah aplikasi mengetahui tentang laluan()?

Apakah fungsi (app *config) dalam fungsi?

Penyelesaian

Laluan dilampirkan pada pelayan http seperti yang ditunjukkan di bawah.

srv := &http.server{
   addr: ":8081", // port
   handler: app.routes() // a handler to invoke
 }

Salin selepas log masuk

routesconfig 结构体的一个方法。即使 config 为空,我们仍然可以像代码中那样调用 routes Kaedah.

 cfg := Config{}
 r := cfg.routes()

Salin selepas log masuk

config Struktur bertindak sebagai penerima kaedah di sini.

Atas ialah kandungan terperinci Go tidak memahami cara http.Server Handler memanggil fungsi yang dilampirkan pada struct kosong. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!