Bagaimanakah Anda Boleh Memulakan Medan Struktur Terbenam Menggunakan Contoh Sedia Ada dalam Go?

DDD
Lepaskan: 2024-11-12 06:03:02
asal
916 orang telah melayarinya

How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?

Isu yang Dihadapi dengan Permulaan Struktur Terbenam dalam Go

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"?
}
Salin selepas log masuk

Penyelesaian

Untuk menangani masalah ini, terdapat dua yang berdaya maju pilihan:

Pilihan 1:

req := new(MyRequest)
req.PathParams = pathParams
req.Request = *origRequest
Salin selepas log masuk

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,
}
Salin selepas log masuk

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.

Memahami Penamaan Medan Struktur Terbenam

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!

sumber:php.cn
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