Struktur golang untuk objek bersarang
Editor PHP Apple berkongsi pengenalan terperinci kepada struktur yang digunakan untuk objek bersarang dalam bahasa Golang. Di Golang, struktur objek bersarang ialah ciri berkuasa yang membolehkan kami menyarang struktur lain atau jenis antara muka dalam struktur. Melalui struktur objek bersarang, kami boleh menggabungkan dan menggunakan semula kod dengan mudah, meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Bukan itu sahaja, struktur objek bersarang juga boleh mencapai kesan warisan berbilang, membolehkan kami mereka bentuk dan membina struktur data yang kompleks dengan lebih fleksibel. Dalam artikel ini, kami akan membincangkan secara terperinci kaedah dan teknik menggunakan struktur objek bersarang di Golang untuk membantu pembaca lebih memahami dan menggunakan ciri ini.
Kandungan soalan
Saya sedang menggunakan gofiber v2 untuk mencipta golang api.
Saya mempunyai struktur dokumen berikut untuk trek muzik dalam pangkalan data mongo:
{ "_id" : objectid("63cc26cb86ae1611380e1206"), "active" : 1, "exclusive" : "false", "track_title" : "burn slow (sting)", "artist_id" : "395", "artist_name" : "david hollandsworth", "album_title" : "cult justice 23", "composer" : "david hollandsworth", "duration" : "00:16", "publisher" : "fliktrax, llc", "description" : "t.v. drama, rural tension, apprehension. style: \"hell on wheels\" soundtrack.", "url_path" : "davidhollandsworth/cultjustice23/burn-slow-sting.wav", "vocal_type" : "instrumental", "beats_per_minute" : "80", "file_path_compressed" : "davidhollandsworth/cultjustice23/burn-slow-sting.mp3", "file_path_uncompressed" : "davidhollandsworth/cultjustice23/burn-slow-sting.wav", "genres" : [ "tension", "americana", "tv drama" ], "genres_keys" : [ "tension", "americana", "tv drama" ], "moods" : [ "tension", "bluesy", "spacey" ], "styles" : [ "tv drama", "unsolved mystery", "western" ], "instruments" : [ "dobro", "banjo", "percussion" ], "keywords" : [ "rural-tension", " showdown", " apprehension", " uncertainty", " light-tension", " strings-tension", " heartland", " trouble", " uneasy", " cautious", " outlaw", " yellowstone", " bayou", " gritty", " swampy", " swamp-people", " southern", " uncertain", " drama", " apprehension", " bluesy", " blues", " shack", " poor-folk", " primitive" ], "sounds_like" : [ "brian tyler", "max richter", "t.v. drama" ], "resembles_song" : [ "hell on wheels", "yellowstone", "rural/outlaw/tension" ], "last_modified" : 1674323659, "variation_count" : 5, "variations" : { "_id" : objectid("63cc26bc86ae1611380e1200"), "track_title" : "burn slow", "artist_name" : "david hollandsworth", "master_track_id" : "63cc26bc86ae1611380e1200", "master_track" : objectid("63cc26bc86ae1611380e1200"), "merged" : 1, "variation_count" : 5, "variations" : { "63cc26bc86ae1611380e1200" : { "track_id" : "63cc26bc86ae1611380e1200", "track_title" : "burn slow", "artist_name" : "david hollandsworth" }, "63cc26c086ae1611380e1203" : { "track_id" : "63cc26c086ae1611380e1203", "track_title" : "burn slow (bed mix)", "artist_name" : "david hollandsworth" }, "63cc26c386ae1611380e1204" : { "track_id" : "63cc26c386ae1611380e1204", "track_title" : "burn slow (cutdown)", "artist_name" : "david hollandsworth" }, "63cc26c786ae1611380e1205" : { "track_id" : "63cc26c786ae1611380e1205", "track_title" : "burn slow (lows and perc)", "artist_name" : "david hollandsworth" }, "63cc26cb86ae1611380e1206" : { "track_id" : "63cc26cb86ae1611380e1206", "track_title" : "burn slow (sting)", "artist_name" : "david hollandsworth" } } } }
Pada masa ini, saya mempunyai struktur trek berikut dalam model golang saya:
type Track struct { ID primitive.ObjectID `bson:"_id, omitempty" json:"_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistId string `bson:"artist_id" json:"artist_id"` ArtistName string `bson:"artist_name" json:"artist_name"` AlbumTitle string `bson:"album_title" json:"album_title"` Composer string `bson:"composer" json:"composer"` Publisher string `bson:"publisher" json:"publisher"` Description string `bson:"description" json:"description"` Duration string `bson:"duration" json:"duration"` UrlPath string `bson:"url_path" json:"url_path"` VocalType string `bson:"vocal_type" json:"vocal_type"` BeatsPerMinute string `bson:"beats_per_minute" json:"beats_per_minute"` FilePathCompressed string `bson:"file_path_compressed" json:"bfile_path_compressed"` FilePathUncompressed string `bson:"file_path_uncompressed" json:"file_path_uncompressed"` PreviewURL string `bson:"preview_url" json:"preview_url"` Genres []interface{} `bson:"genres" json:"genres"` GenresKeys []interface{} `bson:"genres_keys" json:"genres_keys"` Moods []interface{} `bson:"moods" json:"moods"` Styles []interface{} `bson:"styles" json:"styles"` Instruments []interface{} `bson:"instruments" json:"instruments"` Keywords []interface{} `bson:"keywords" json:"keywords"` SoundsLike []interface{} `bson:"sounds_like" json:"sounds_like"` ResemblesSong []interface{} `bson:"resembles_song" json:"resembles_song"` LastModified int `bson:"last_modified" json:"last_modified"` VariationCount int `bson:"variation_count" json:"variation_count"` }
Pada masa ini semua medan dokumen dinyahkodkan dengan betul kepada json, tetapi saya kini buntu tentang cara membina medan "variations.variations" terbenam (perhatikan bahawa terdapat variasi dalam variasi). Struktur varian terbenam ialah objek tanpa kunci, tetapi rentetan id mongo dinamik.
Saya cuba melaksanakan struct tersuai dan jenis antara muka tetapi tidak berjaya.
Sekiranya sesiapa pernah menghadapi masalah ini sebelum ini, sebarang bantuan amatlah dihargai.
Penyelesaian
Saya syorkan elakkan interface{}
(或 any
),使用具体类型。例如。 genres
是一个字符串数组,在 go 中使用 []string
jika boleh.
Untuk kunci variations.variations
字段,您可以使用 map
以及 string
dan jenis struktur yang menerangkan elemennya.
type Track struct { ID primitive.ObjectID `bson:"_id, omitempty" json:"_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistId string `bson:"artist_id" json:"artist_id"` ArtistName string `bson:"artist_name" json:"artist_name"` AlbumTitle string `bson:"album_title" json:"album_title"` Composer string `bson:"composer" json:"composer"` Publisher string `bson:"publisher" json:"publisher"` Description string `bson:"description" json:"description"` Duration string `bson:"duration" json:"duration"` UrlPath string `bson:"url_path" json:"url_path"` VocalType string `bson:"vocal_type" json:"vocal_type"` BeatsPerMinute string `bson:"beats_per_minute" json:"beats_per_minute"` FilePathCompressed string `bson:"file_path_compressed" json:"bfile_path_compressed"` FilePathUncompressed string `bson:"file_path_uncompressed" json:"file_path_uncompressed"` PreviewURL string `bson:"preview_url" json:"preview_url"` Genres []string `bson:"genres" json:"genres"` GenresKeys []string `bson:"genres_keys" json:"genres_keys"` Moods []string `bson:"moods" json:"moods"` Styles []string `bson:"styles" json:"styles"` Instruments []string `bson:"instruments" json:"instruments"` Keywords []string `bson:"keywords" json:"keywords"` SoundsLike []string `bson:"sounds_like" json:"sounds_like"` ResemblesSong []string `bson:"resembles_song" json:"resembles_song"` LastModified int `bson:"last_modified" json:"last_modified"` VariationCount int `bson:"variation_count" json:"variation_count"` Variations Variations `bson:"variations" json:"variations"` } type Variations struct { ID primitive.ObjectID `bson:"_id" json:"_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistName string `bson:"artist_name" json:"artist_name"` MasterTrackID string `bson:"master_track_id" json:"master_track_id"` MasterTrack primitive.ObjectID `bson:"master_track" json:"master_track"` Merged int `bson:"merged" json:"merged"` VariationCount int `bson:"variation_count" json:"variation_count"` Variations map[string]Variation `bson:"variations" json:"variations"` } type Variation struct { TrackID string `bson:"track_id" json:"track_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistName string `bson:"artist_name" json:"artist_name"` }
Atas ialah kandungan terperinci Struktur golang untuk objek bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Fungsi SPLIT() membahagikan rentetan kepada tatasusunan dengan pembatas yang ditentukan, mengembalikan tatasusunan rentetan di mana setiap elemen ialah bahagian yang dipisahkan pembatas bagi rentetan asal. Penggunaan termasuk: membahagikan senarai nilai yang dipisahkan koma kepada tatasusunan, mengekstrak nama fail daripada laluan, dan membahagikan alamat e-mel kepada nama pengguna dan domain.

Cara untuk mengisih rentetan dalam Java: Gunakan kaedah Arrays.sort() untuk mengisih tatasusunan rentetan dalam tertib menaik. Gunakan kaedah Collections.sort() untuk mengisih senarai rentetan dalam tertib menaik. Gunakan antara muka Pembanding untuk menyusun rentetan tersuai.

Dalam bahasa C, \0 ialah tanda akhir rentetan, dipanggil aksara nol atau penamat. Memandangkan rentetan disimpan dalam ingatan sebagai tatasusunan bait, pengkompil mengecam penghujung rentetan melalui \0, memastikan rentetan dikendalikan dengan betul. \0 Cara ia berfungsi: Pengkompil berhenti membaca aksara apabila ia menemui \0 dan aksara seterusnya diabaikan. \0 sendiri tidak menduduki ruang storan. Faedah termasuk pengendalian rentetan yang boleh dipercayai, kecekapan yang dipertingkatkan (tidak perlu mengimbas keseluruhan tatasusunan untuk mencari penghujungnya), dan kemudahan perbandingan dan manipulasi.

args bermaksud argumen baris arahan dalam Java dan merupakan tatasusunan rentetan yang mengandungi senarai argumen yang dihantar kepada program apabila ia dimulakan. Ia hanya tersedia dalam kaedah utama, dan nilai lalainya ialah tatasusunan kosong, dengan setiap parameter boleh diakses oleh indeks. args digunakan untuk menerima dan memproses argumen baris arahan untuk mengkonfigurasi atau menyediakan data input apabila program bermula.

args ialah tatasusunan parameter khas kaedah utama dalam Java, digunakan untuk mendapatkan tatasusunan rentetan parameter baris arahan atau input luaran. Dengan mengakses tatasusunan args, atur cara boleh membaca hujah ini dan memprosesnya mengikut keperluan.

Teknologi AI telah digabungkan dengan fungsi PHP untuk meningkatkan kefungsian aplikasi. Aplikasi AI khusus termasuk: menggunakan algoritma pembelajaran mesin untuk mengklasifikasikan teks, seperti Naive Bayes. Lakukan analisis teks yang mendalam menggunakan teknik pemprosesan bahasa semula jadi seperti pembahagian perkataan dan pembubuhan.

Kesan fungsi pada prestasi program C++ termasuk overhed panggilan fungsi, pembolehubah tempatan dan overhed peruntukan objek: Overhed panggilan fungsi: termasuk peruntukan bingkai tindanan, pemindahan parameter dan pemindahan kawalan, yang mempunyai kesan ketara pada fungsi kecil. Overhed pembolehubah tempatan dan peruntukan objek: Sebilangan besar pembolehubah tempatan atau penciptaan objek dan pemusnahan boleh menyebabkan limpahan tindanan dan kemerosotan prestasi.

Bagaimana untuk melaksanakan fungsi pengisihan aksara Cina dalam perisian pengaturcaraan bahasa C? Dalam masyarakat moden, fungsi pengisihan aksara Cina adalah salah satu fungsi penting dalam banyak perisian. Sama ada dalam perisian pemprosesan perkataan, enjin carian atau sistem pangkalan data, aksara Cina perlu diisih untuk memaparkan dan memproses data teks Cina dengan lebih baik. Dalam pengaturcaraan bahasa C, bagaimana untuk melaksanakan fungsi pengisihan aksara Cina? Satu kaedah diperkenalkan secara ringkas di bawah. Pertama sekali, untuk melaksanakan fungsi pengisihan aksara Cina dalam bahasa C, kita perlu menggunakan fungsi perbandingan rentetan. Berlari
