Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memulakan Struktur Terbenam dengan Betul dalam Go?

Bagaimana untuk Memulakan Struktur Terbenam dengan Betul dalam Go?

DDD
DDDasal
2024-12-27 18:24:15410semak imbas

How to Properly Initialize Embedded Structs in Go?

Cara Memulakan struct Terbenam dalam Golang

Dalam Go, adalah mungkin untuk mentakrifkan struct dalam struct lain untuk mencipta struktur data bersarang. Walau bagaimanapun, memulakan struct bersarang ini boleh memberikan cabaran.

Pertimbangkan contoh berikut:

type DetailsFilter struct {
  Filter struct {
    Name    string        
    ID      int                           
  } 
}

Untuk memulakan struct DetailsFilter dengan struct Penapis terbenam, anda mungkin menghadapi ralat jika anda mencuba untuk menetapkan peta generik kepada medan Penapis.

var M map[string]interface{}
M = make(map[string]interface{})
M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5}
var detailsFilter = DetailsFilter{Filter: M["Filter"]}}

Ralat yang anda akan terima ialah: "tidak boleh menggunakan (taip antara muka {}) sebagai jenis struct dalam nilai medan : memerlukan penegasan jenis."

Sebab ralat ini ialah medan struct tanpa nama, seperti yang digunakan di sini untuk Penapis, memerlukan jenis yang tepat untuk dinyatakan semasa pemula. Anda boleh menyelesaikannya dengan mentakrifkan secara eksplisit jenis medan Penapis dalam struct tanpa nama:

type DetailsFilter struct {
  Filter struct {
    Name    string        
    ID      int                           
  } 
}

df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}

Sebagai alternatif, anda boleh memilih untuk tidak menggunakan struct tanpa nama untuk Penapis dan sebaliknya memberikannya jenis bernama:

type Filter struct {
  Name    string
  ID      int
}

type DetailsFilter struct {
  Filter Filter
}

df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}

Kedua-dua kaedah akan membolehkan anda memulakan struct DetailsFilter dengan struct Filter bersarang.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Struktur Terbenam dengan Betul 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