Dalam Go, struct ialah jenis agregat yang digunakan untuk mentakrif dan merangkum data. Ia membolehkan menggabungkan bidang pelbagai jenis. Structs boleh dilihat sebagai jenis data tersuai yang serupa dengan kelas dalam bahasa lain, tetapi ia tidak menyokong warisan. Kaedah ialah fungsi yang dikaitkan dengan jenis tertentu (selalunya struct) dan boleh dipanggil menggunakan tika jenis itu.
Mentakrif dan Memulakan Struktur
Mentakrifkan Struktur
Struktur ditakrifkan menggunakan kata kunci jenis dan struktur. Berikut ialah contoh definisi struktur mudah:
type User struct { Username string Email string SignInCount int IsActive bool }
Memulakan Struktur
Struktur boleh dimulakan dalam pelbagai cara.
Memulakan dengan Nama Medan
user1 := User{ Username: "alice", Email: "alice@example.com", SignInCount: 1, IsActive: true, }
Memulakan dengan Nilai Lalai
Jika sesetengah medan tidak dinyatakan, ia dimulakan kepada nilai sifarnya untuk jenis masing-masing.
user2 := User{ Username: "bob", }
Dalam contoh ini, E-mel akan dimulakan kepada rentetan kosong (""), SignInCount kepada 0 dan IsActive kepada false.
Memulakan dengan Penunjuk
Struktur juga boleh dimulakan menggunakan penunjuk.
user3 := &User{ Username: "charlie", Email: "charlie@example.com", }
Kaedah dan Tingkah Laku Struktur
Dalam Go, struct bukan sahaja untuk menyimpan data tetapi juga boleh mempunyai kaedah yang ditentukan untuknya. Ini membolehkan struct untuk merangkum tingkah laku yang berkaitan dengan data mereka. Di bawah ialah penjelasan terperinci tentang kaedah dan tingkah laku struct.
Menentukan Kaedah untuk Struktur
Kaedah ditakrifkan menggunakan penerima, yang merupakan parameter pertama kaedah dan menentukan jenis kaedah tersebut. Penerima boleh sama ada penerima nilai atau penerima penunjuk.
Penerima Nilai
Penerima nilai mencipta salinan struct apabila kaedah dipanggil, jadi pengubahsuaian pada medan tidak menjejaskan struct asal.
type User struct { Username string Email string } func (u User) PrintInfo() { fmt.Printf("Username: %s, Email: %s\n", u.Username, u.Email) }
Penerima Penunjuk
Penerima penunjuk membenarkan kaedah untuk mengubah suai medan struct asal secara langsung.
func (u *User) UpdateEmail(newEmail string) { u.Email = newEmail }
Set Kaedah
Dalam Go, semua kaedah struct membentuk set kaedahnya. Kaedah yang ditetapkan untuk penerima nilai merangkumi semua kaedah dengan penerima nilai, manakala kaedah yang ditetapkan untuk penerima penunjuk merangkumi semua kaedah dengan kedua-dua penunjuk dan penerima nilai.
Antara Muka dan Kaedah Struktur
Kaedah struktur sering digunakan dengan antara muka untuk mencapai polimorfisme. Apabila mentakrifkan antara muka, anda menentukan kaedah yang mesti dilaksanakan oleh struct.
type UserInfo interface { PrintInfo() } // User implements the UserInfo interface func (u User) PrintInfo() { fmt.Printf("Username: %s, Email: %s\n", u.Username, u.Email) } func ShowInfo(ui UserInfo) { ui.PrintInfo() }
Penjajaran Memori dalam Struktur
Dalam Go, penjajaran memori untuk struct direka untuk meningkatkan kecekapan capaian. Jenis data yang berbeza mempunyai keperluan penjajaran khusus dan pengkompil boleh memasukkan bait padding antara medan struct untuk memenuhi keperluan ini.
Apakah Penjajaran Memori?
Penjajaran memori bermakna data dalam ingatan mesti terletak pada alamat yang berbilang nilai tertentu. Saiz jenis data menentukan keperluan penjajarannya. Contohnya, int32 memerlukan penjajaran kepada 4 bait dan int64 memerlukan penjajaran kepada 8 bait.
Mengapa Penjajaran Memori Diperlukan?
Akses memori yang cekap adalah penting untuk prestasi CPU. Jika pembolehubah tidak diselaraskan dengan betul, CPU mungkin memerlukan berbilang akses memori untuk membaca atau menulis data, yang membawa kepada kemerosotan prestasi. Dengan menjajarkan data, pengkompil memastikan capaian memori yang cekap.
Peraturan untuk Penjajaran Memori Struktur
- Penjajaran medan: Setiap alamat medan mesti memenuhi keperluan penjajaran jenisnya. Pengkompil boleh memasukkan bait padding antara medan untuk memastikan penjajaran yang betul.
- Penjajaran struktur: Saiz struct mestilah gandaan daripada keperluan penjajaran terbesar antara medannya.
Contoh:
type User struct { Username string Email string SignInCount int IsActive bool }
Output: 12
Analisis:
- a ialah int8, menduduki 1 bait, sejajar dengan 1.
- b ialah int32, memerlukan penjajaran kepada 4 bait. Pengkompil memasukkan 3 bait padding antara a dan b untuk menjajarkan alamat b kepada 4.
- c ialah int8, memerlukan 1 bait, tetapi jumlah saiz struct mestilah gandaan 4 (keperluan penjajaran terbesar). Pengkompil menambah 3 bait padding pada penghujungnya.
Mengoptimumkan Penjajaran Memori
Anda boleh menyusun semula medan struct untuk meminimumkan padding dan mengurangkan penggunaan memori.
user1 := User{ Username: "alice", Email: "alice@example.com", SignInCount: 1, IsActive: true, }
Output: 8
Dalam versi yang dioptimumkan ini, b diletakkan dahulu, menjajarkannya kepada 4 bait. a dan c diletakkan berturut-turut, menjadikan jumlah saiz 8 bait, yang lebih padat daripada versi yang tidak dioptimumkan.
Ringkasan
- Medan struktur dalam Go diperuntukkan memori berdasarkan keperluan penjajarannya, dengan potensi bait padding.
- Melaraskan susunan medan boleh meminimumkan padding dan mengoptimumkan penggunaan memori.
- Gunakan tidak selamat.Sizeof untuk menentukan saiz memori sebenar sesuatu struct.
Struktur dan Komposisi Bersarang
Dalam Go, struktur dan komposisi bersarang ialah alat yang berkuasa untuk penggunaan semula kod dan mengatur data yang kompleks. Struk bersarang membenarkan struct memasukkan struct lain sebagai medan, membolehkan penciptaan model data yang kompleks. Komposisi, sebaliknya, mencipta struct baharu dengan memasukkan struct lain, memudahkan penggunaan semula kod.
Struktur Bersarang
Struktur bersarang membolehkan satu struct memasukkan struct lain sebagai medan. Ini menjadikan struktur data lebih fleksibel dan teratur. Berikut ialah contoh struct bersarang:
type User struct { Username string Email string SignInCount int IsActive bool }
Komposisi Struktur
Komposisi membenarkan berbilang struct digabungkan menjadi struct baharu, membolehkan penggunaan semula kod. Dalam komposisi, struct boleh memasukkan berbilang struct lain sebagai medan. Ini membantu membina model yang lebih kompleks dan berkongsi medan atau kaedah yang sama. Berikut ialah contoh komposisi struct:
user1 := User{ Username: "alice", Email: "alice@example.com", SignInCount: 1, IsActive: true, }
Perbezaan Antara Struktur Bersarang dan Komposisi
- Struktur Bersarang: Digunakan untuk menggabungkan struct bersama-sama, dengan jenis medan dalam satu struct ialah satu lagi struct. Pendekatan ini sering digunakan untuk menerangkan model data dengan perhubungan hierarki.
- Komposisi: Membenarkan struct memasukkan medan daripada berbilang struct lain. Kaedah ini digunakan untuk mencapai penggunaan semula kod, membolehkan struct mempunyai gelagat dan atribut yang lebih kompleks.
Ringkasan
Struktur dan komposisi bersarang ialah ciri berkuasa dalam Go yang membantu mengatur dan mengurus struktur data yang kompleks. Apabila mereka bentuk model data, menggunakan struktur dan gubahan bersarang dengan sewajarnya boleh menjadikan kod anda lebih jelas dan lebih boleh diselenggara.
Struktur Kosong
Struktur kosong dalam Go ialah struct tanpa medan.
Saiz dan Alamat Memori
Struktur kosong menduduki sifar bait memori. Walau bagaimanapun, alamat ingatannya mungkin sama atau mungkin tidak sama dalam keadaan yang berbeza. Apabila pelarian memori berlaku, alamat adalah sama, menunjuk ke runtime.zerobase.
user2 := User{ Username: "bob", }
Daripada output, pembolehubah a, b dan zerobase berkongsi alamat yang sama, semuanya menunjuk kepada pembolehubah global runtime.zerobase (runtime/malloc.go).
Mengenai senario melarikan diri:
- Pembolehubah c dan d melarikan diri ke timbunan. Alamat mereka ialah 0x590d00, dan mereka membandingkan sama (benar).
- Pembolehubah e dan f mempunyai alamat yang berbeza (0xc00008ef47) dan bandingkan tidak sama (salah).
Tingkah laku ini disengajakan dalam Go. Apabila pembolehubah struct kosong tidak terlepas, penunjuknya adalah tidak sama. Selepas melarikan diri, penunjuk menjadi sama.
Pengiraan Ruang Apabila Membenamkan Struktur Kosong
Struktur kosong itu sendiri tidak menduduki ruang, tetapi apabila dibenamkan dalam struktur lain, ia mungkin menggunakan ruang bergantung pada kedudukannya:
- Apabila ia adalah satu-satunya medan dalam struct, struct tidak menduduki ruang.
- Apabila ia adalah medan pertama atau pertengahan, ia tidak menempati ruang.
- Apabila ia adalah medan terakhir, ia menduduki ruang yang sama dengan medan sebelumnya.
user3 := &User{ Username: "charlie", Email: "charlie@example.com", }
Apabila struct kosong ialah elemen tatasusunan atau kepingan:
type User struct { Username string Email string } func (u User) PrintInfo() { fmt.Printf("Username: %s, Email: %s\n", u.Username, u.Email) }
Aplikasi
Sifat bersaiz sifar bagi struct kosong membolehkannya digunakan untuk pelbagai tujuan tanpa overhed memori tambahan.
Cegah Permulaan Struktur Tidak Berkunci
type User struct { Username string Email string SignInCount int IsActive bool }
Melaksanakan Struktur Data Set
user1 := User{ Username: "alice", Email: "alice@example.com", SignInCount: 1, IsActive: true, }
Penghantaran Isyarat melalui Saluran
Kadangkala, kandungan data yang dihantar melalui saluran tidak relevan, hanya berfungsi sebagai isyarat. Sebagai contoh, struct kosong boleh digunakan dalam pelaksanaan semaphore:
user2 := User{ Username: "bob", }
Kami adalah Leapcell, pilihan utama anda untuk menggunakan projek Go ke awan.
Leapcell ialah Platform Tanpa Pelayan Generasi Seterusnya untuk Pengehosan Web, Tugas Async dan Redis:
- Sokongan Berbilang Bahasa
- Bangun dengan JavaScript, Python, Go atau Rust.
- Kerahkan projek tanpa had secara percuma
- bayar hanya untuk penggunaan — tiada permintaan, tiada caj.
- Kecekapan Kos yang tiada tandingan
- Bayar semasa anda pergi tanpa caj terbiar.
- Contoh: $25 menyokong 6.94 juta permintaan pada purata masa tindak balas 60ms.
- Pengalaman Pembangun Diperkemas
- UI intuitif untuk persediaan yang mudah.
- Saluran paip CI/CD automatik sepenuhnya dan penyepaduan GitOps.
- Metrik masa nyata dan pengelogan untuk mendapatkan cerapan yang boleh diambil tindakan.
- Skala Mudah dan Prestasi Tinggi
- Penskalaan automatik untuk mengendalikan konkurensi tinggi dengan mudah.
- Sifar operasi overhed — hanya fokus pada pembinaan.
Terokai lagi dalam Dokumentasi!
Ikuti kami di X: @LeapcellHQ
Baca di blog kami
Atas ialah kandungan terperinci Menyelam dalam Go Struct. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Golangisidealforbuildingscalablesystemsduetoitseficiencyandcurrency, whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.golang'sdesignencouragescouragescouragescouragescourageSlean, readablecodeanditsouragescouragescourscean,

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

Sebab -sebab memilih Golang termasuk: 1) prestasi konkurensi tinggi, 2) sistem jenis statik, 3) mekanisme pengumpulan sampah, 4) perpustakaan dan ekosistem standard yang kaya, yang menjadikannya pilihan yang ideal untuk membangunkan perisian yang cekap dan boleh dipercayai.

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Golang melakukan lebih baik dalam masa penyusunan dan pemprosesan serentak, sementara C mempunyai lebih banyak kelebihan dalam menjalankan kelajuan dan pengurusan ingatan. 1. Golang mempunyai kelajuan kompilasi yang cepat dan sesuai untuk pembangunan pesat. 2.C berjalan pantas dan sesuai untuk aplikasi kritikal prestasi. 3. Golang adalah mudah dan cekap dalam pemprosesan serentak, sesuai untuk pengaturcaraan serentak. 4.C Pengurusan memori manual memberikan prestasi yang lebih tinggi, tetapi meningkatkan kerumitan pembangunan.

Aplikasi Golang dalam perkhidmatan web dan pengaturcaraan sistem terutamanya ditunjukkan dalam kesederhanaan, kecekapan dan kesesuaiannya. 1) Dalam perkhidmatan web, Golang menyokong penciptaan aplikasi web berprestasi tinggi dan API melalui perpustakaan HTTP yang kuat dan keupayaan pemprosesan serentak. 2) Dalam pengaturcaraan sistem, Golang menggunakan ciri -ciri yang berdekatan dengan perkakasan dan keserasian dengan bahasa C sesuai untuk pembangunan sistem operasi dan sistem tertanam.

Golang dan C mempunyai kelebihan dan kekurangan mereka sendiri dalam perbandingan prestasi: 1. Golang sesuai untuk perselisihan yang tinggi dan perkembangan pesat, tetapi pengumpulan sampah boleh menjejaskan prestasi; 2.C menyediakan prestasi yang lebih tinggi dan kawalan perkakasan, tetapi mempunyai kerumitan pembangunan yang tinggi. Apabila membuat pilihan, anda perlu mempertimbangkan keperluan projek dan kemahiran pasukan dengan cara yang komprehensif.

Golang sesuai untuk senario pengaturcaraan berprestasi tinggi dan serentak, manakala Python sesuai untuk pembangunan pesat dan pemprosesan data. 1.Golang menekankan kesederhanaan dan kecekapan, dan sesuai untuk perkhidmatan back-end dan microservices. 2. Python terkenal dengan sintaks ringkas dan perpustakaan yang kaya, sesuai untuk sains data dan pembelajaran mesin.


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

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)