Struktur terbenam menawarkan kelebihan ketara dalam Go, tetapi kadangkala ia boleh memberikan cabaran unik, terutamanya semasa pemula. Pertimbangkan senario berikut, di mana struct yang mengandungi struct dalaman tanpa nama mesti dimulakan menggunakan contoh yang sedia ada bagi struct dalam.
type MyRequest struct { Request http.Request PathParams map[string]string } func New(origRequest *http.Request, pathParams map[string]string) *MyRequest { // How to initialize "Request" field with "origRequest"? }
Untuk menangani masalah ini, terdapat dua yang berdaya maju pilihan:
Pilihan 1:
req := new(MyRequest) req.PathParams = pathParams req.Request = *origRequest
Dalam pendekatan ini, tika baharu MyRequest dicipta menggunakan baharu. Medan PathParams dimulakan dengan peta pathParams yang disediakan. Permintaan struktur dalaman tanpa nama dimulakan dengan secara eksplisit memberikan nilai dereference origRequest kepadanya.
Pilihan 2:
req := &MyRequest{ PathParams: pathParams, Request: origRequest, }
Alternatif ini pendekatan menggunakan sintaks literal komposit untuk mencipta contoh baharu MyRequest. Kedua-dua medan PathParams dan Request dimulakan dalam literal. Adalah penting untuk ambil perhatian bahawa medan Permintaan dimulakan tanpa keperluan untuk penyahrujukan.
Apabila struct dalaman tanpa nama dibenamkan dalam struct yang lebih besar , medan terbenam mewarisi nama struct luar. Dalam kes ini, kedua-dua PathParams dan Request menjadi medan MyRequest. Untuk mendapatkan maklumat lanjut, rujuk spesifikasi Go pada [Struct Types](https://go.dev/ref/spec#Struct_types).
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Memulakan Medan Struktur Terbenam Menggunakan Contoh Sedia Ada dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!