Rumah pembangunan bahagian belakang Golang Bagaimana untuk menggunakan struktur bersarang dalam Go?

Bagaimana untuk menggunakan struktur bersarang dalam Go?

May 11, 2023 pm 04:39 PM
go guna Struktur bersarang

Dalam bahasa Go, struktur bersarang ialah teknik yang sangat biasa. Dengan membenamkan satu struktur dalam yang lain, kami boleh memecahkan model data yang kompleks kepada bahagian yang lebih kecil, menjadikannya lebih mudah untuk difahami dan diselenggara. Artikel ini akan memperkenalkan cara menggunakan struktur bersarang dalam Go dan beberapa amalan terbaik.

1. Tentukan struktur bersarang

Pertama, kita perlu mentakrifkan struktur yang mengandungi struktur bersarang. Kod berikut menunjukkan cara untuk mentakrifkan struktur Syarikat yang mengandungi struktur Orang:

type Person struct {
  Name string
  Age int
}

type Company struct {
  Name string
  Address string
  CEO Person
}
Salin selepas log masuk

Dalam contoh ini, kami mencipta struktur Orang untuk mewakili CEO setiap syarikat, dan kemudian kami membenamkannya dalam struktur Syarikat . Dengan cara ini, kita boleh mengakses medan CEO sama seperti struktur biasa.

2. Mulakan struktur bersarang

Seterusnya, kita perlu memulakan struktur bersarang. Kita boleh menggunakan literal struktur untuk memulakan struktur bersarang. Kodnya adalah seperti berikut:

company := Company{
  Name: "ABC Inc.",
  Address: "123 Main St.",
  CEO: Person{
    Name: "John Smith",
    Age: 45,
  },
}
Salin selepas log masuk

Dalam contoh ini, kami memulakan struktur Syarikat melalui literal. Ambil perhatian bahawa kami menggunakan struktur Orang secara literal dalam medan CEO untuk memulakannya.

3. Akses medan struktur bersarang

Kini kami telah menentukan dan memulakan struktur bersarang. Kita boleh mengakses bidang struktur bersarang seperti struktur biasa. Begini caranya untuk mengakses medan nama dan umur CEO:

fmt.Println(company.CEO.Name) // 输出 “John Smith”
fmt.Println(company.CEO.Age) // 输出 “45”
Salin selepas log masuk

Dalam contoh ini, kami menggunakan operator titik untuk mengakses medan Nama dan Umur dalam struktur CEO. Ini sama seperti mengakses struktur biasa.

4. Pewarisan dan timpa

Dalam sesetengah senario, kita mungkin perlu mewarisi dan menimpa dalam struktur bersarang.

Diwarisi

Jika dua struktur dalam struktur bersarang mempunyai medan yang sama, struktur bersarang akan menimpa medan dalam struktur terbenam. Jika struktur bersarang mengandungi medan tambahan, ia akan ditambahkan pada struktur terbenam. Berikut ialah contoh:

type Animal struct {
  Name string
  Age int
}

type Bird struct {
  Animal // 继承Animal结构体
  CanFly bool
}

bird := Bird{
  Animal: Animal{
    Name: "Polly",
    Age: 2,
  },
  CanFly: true,
}

fmt.Println(bird.Name) // 输出 “Polly”
fmt.Println(bird.Age) // 输出 “2”
fmt.Println(bird.CanFly) // 输出 “true”
Salin selepas log masuk

Dalam contoh ini, struktur Burung membenamkan struktur Haiwan, jadi kita boleh mengakses medan struktur Haiwan seperti kita mengakses struktur Burung. Apabila memulakan struktur Burung, kami memulakannya menggunakan literal struktur Haiwan. Oleh kerana struktur Burung mewarisi struktur Haiwan, ia secara semula jadi boleh mewarisi nama dan medan umur struktur Haiwan.

Timpa

Jika anda perlu mengatasi beberapa medan atau kaedah dalam struktur bersarang, kami boleh melebihkan dengan cara yang sama seperti struktur biasa. Berikut ialah contoh:

type Person struct {
  Name string
  Age int
}

type Employee struct {
  Person // 继承Person结构体
  EmployeeID string
}

func (p Person) Greet() {
  fmt.Println("Hello")
}

func (e Employee) Greet() {
  fmt.Println("Hi, I'm an employee")
}

employee := Employee{
  Person: Person{
    Name: "John Smith",
    Age: 35,
  },
  EmployeeID: "12345",
}

employee.Person.Greet() // 输出 “Hello”
employee.Greet() // 输出 “Hi, I'm an employee”
Salin selepas log masuk

Dalam contoh ini, kami mentakrifkan struktur Orang dan struktur Pekerja. Struktur Pekerja mewarisi daripada struktur Orang. Kami menentukan kaedah Sambut dalam struktur Orang, yang mencetak "Hello". Dalam struktur Pekerja, kami membebankan kaedah Greet, yang mencetak "Hai, saya seorang pekerja". Selepas kita memulakan pembolehubah pekerja menggunakan struktur Pekerja, kita boleh memanggil kaedah Greet struktur Orang untuk mencetak "Hello", atau memanggil kaedah Greet struktur Pekerja untuk mencetak "Hai, saya pekerja".

5. Antara muka dan penunjuk bersarang

Apabila menggunakan struktur bersarang, kami juga boleh menyusun antara muka dan penunjuk. Berikut ialah contoh:

type Talker interface {
  Talk()
}

type Person struct {
  Name string
  Age int
}

func (p *Person) Talk() {
  fmt.Println("Hi, I'm " + p.Name)
}

type Employee struct {
  *Person // 嵌套指针类型
  EmployeeID string
  Role string
}

func (e *Employee) Talk() {
  fmt.Println("Hi, I'm" + e.Name + ", and I work as a " + e.Role)
}

employee := Employee{
  Person: &Person{
    Name: "John Smith",
    Age: 35,
  },
  EmployeeID: "12345",
  Role: "software engineer",
}

var talker Talker // 声明一个接口类型的变量
talker = &employee // 将employee赋值给talker

talker.Talk() // 输出 “Hi, I'm John Smith, and I work as a software engineer”
Salin selepas log masuk

Dalam contoh ini, kami mentakrifkan antara muka Talker, yang mempunyai kaedah Talk. Kami menentukan struktur Orang dan struktur Pekerja, yang kedua-duanya melaksanakan antara muka Talker. Struktur Pekerja mempunyai penunjuk Orang yang bersarang di dalamnya, jadi kita boleh menggunakan kaedah Bicara struktur Orang. Selepas memulakan pembolehubah pekerja, kami menetapkannya kepada pembolehubah jenis antara muka Talker, supaya kami boleh menggunakan kaedah jenis antara muka untuk mengakses pembolehubah pekerja.

6. Kesimpulan

Dalam bahasa Go, struktur bersarang ialah teknologi yang sangat berguna yang boleh menguraikan model data yang kompleks kepada bahagian yang lebih kecil. Apabila menggunakan struktur bersarang, kita perlu memberi perhatian kepada penggunaan pewarisan dan penggantian, serta penggunaan antara muka dan penunjuk bersarang. Dengan menguasai teknologi ini, kami boleh membangunkan dan mengekalkan projek bahasa Go dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan struktur bersarang dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Apr 26, 2024 am 09:40 AM

MetaMask (juga dipanggil Little Fox Wallet dalam bahasa Cina) ialah perisian dompet penyulitan percuma dan diterima baik. Pada masa ini, BTCC menyokong pengikatan pada dompet MetaMask Selepas mengikat, anda boleh menggunakan dompet MetaMask untuk log masuk dengan cepat, menyimpan nilai, membeli syiling, dsb., dan anda juga boleh mendapatkan bonus percubaan 20 USDT untuk pengikatan pertama. Dalam tutorial dompet BTCCMetaMask, kami akan memperkenalkan secara terperinci cara mendaftar dan menggunakan MetaMask, dan cara mengikat dan menggunakan dompet Little Fox dalam BTCC. Apakah dompet MetaMask? Dengan lebih 30 juta pengguna, MetaMask Little Fox Wallet ialah salah satu dompet mata wang kripto yang paling popular hari ini. Ia percuma untuk digunakan dan boleh dipasang pada rangkaian sebagai sambungan

Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Jun 02, 2024 am 09:00 AM

Dalam Go, anda boleh menggunakan ungkapan biasa untuk memadankan cap masa: susun rentetan ungkapan biasa, seperti yang digunakan untuk memadankan cap masa ISO8601: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Gunakan fungsi regexp.MatchString untuk menyemak sama ada rentetan sepadan dengan ungkapan biasa.

Bagaimana untuk menghantar mesej Go WebSocket? Bagaimana untuk menghantar mesej Go WebSocket? Jun 03, 2024 pm 04:53 PM

Dalam Go, mesej WebSocket boleh dihantar menggunakan pakej gorila/soket web. Langkah khusus: Wujudkan sambungan WebSocket. Hantar mesej teks: Panggil WriteMessage(websocket.TextMessage,[]bait("Mesej")). Hantar mesej binari: panggil WriteMessage(websocket.BinaryMessage,[]bait{1,2,3}).

Perbezaan antara bahasa Golang dan Go Perbezaan antara bahasa Golang dan Go May 31, 2024 pm 08:10 PM

Bahasa Go dan Go adalah entiti yang berbeza dengan ciri yang berbeza. Go (juga dikenali sebagai Golang) terkenal dengan kesesuaiannya, kelajuan penyusunan pantas, pengurusan memori dan kelebihan merentas platform. Kelemahan bahasa Go termasuk ekosistem yang kurang kaya berbanding bahasa lain, sintaks yang lebih ketat dan kekurangan penaipan dinamik.

Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Jun 04, 2024 pm 12:27 PM

Kebocoran memori boleh menyebabkan memori program Go terus meningkat dengan: menutup sumber yang tidak lagi digunakan, seperti fail, sambungan rangkaian dan sambungan pangkalan data. Gunakan rujukan yang lemah untuk mengelakkan kebocoran memori dan objek sasaran untuk pengumpulan sampah apabila ia tidak lagi dirujuk dengan kuat. Menggunakan go coroutine, memori tindanan coroutine akan dikeluarkan secara automatik apabila keluar untuk mengelakkan kebocoran memori.

Apakah Bitget Launchpool? Bagaimana untuk menggunakan Bitget Launchpool? Apakah Bitget Launchpool? Bagaimana untuk menggunakan Bitget Launchpool? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool ialah platform dinamik yang direka untuk semua peminat mata wang kripto. BitgetLaunchpool menonjol dengan produknya yang unik. Di sini, anda boleh mempertaruhkan token anda untuk membuka kunci lebih banyak ganjaran, termasuk airdrop, ganjaran yang tinggi dan kumpulan hadiah yang murah eksklusif untuk peserta awal. Apakah BitgetLaunchpool? BitgetLaunchpool ialah platform mata wang kripto di mana token boleh dipertaruhkan dan diperoleh dengan terma dan syarat yang mesra pengguna. Dengan melabur BGB atau token lain dalam Launchpool, pengguna berpeluang menerima airdrop percuma, pendapatan dan mengambil bahagian dalam kumpulan bonus yang murah hati. Pendapatan daripada aset yang dicagarkan dikira dalam masa T+1 jam dan ganjaran adalah berdasarkan

Panduan untuk menguji unit fungsi serentak Go Panduan untuk menguji unit fungsi serentak Go May 03, 2024 am 10:54 AM

Unit menguji fungsi serentak adalah penting kerana ini membantu memastikan kelakuan mereka yang betul dalam persekitaran serentak. Prinsip asas seperti pengecualian bersama, penyegerakan dan pengasingan mesti dipertimbangkan semasa menguji fungsi serentak. Fungsi serentak boleh diuji unit dengan mensimulasikan, menguji keadaan perlumbaan dan mengesahkan keputusan.

Bagaimana untuk menggunakan pembungkus ralat Golang? Bagaimana untuk menggunakan pembungkus ralat Golang? Jun 03, 2024 pm 04:08 PM

Dalam Golang, pembalut ralat membolehkan anda membuat ralat baharu dengan menambahkan maklumat kontekstual kepada ralat asal. Ini boleh digunakan untuk menyatukan jenis ralat yang dilemparkan oleh perpustakaan atau komponen yang berbeza, memudahkan penyahpepijatan dan pengendalian ralat. Langkah-langkahnya adalah seperti berikut: Gunakan fungsi ralat. Balut untuk membalut ralat asal kepada ralat baharu. Ralat baharu mengandungi maklumat kontekstual daripada ralat asal. Gunakan fmt.Printf untuk mengeluarkan ralat yang dibalut, memberikan lebih konteks dan kebolehtindakan. Apabila mengendalikan pelbagai jenis ralat, gunakan fungsi ralat. Balut untuk menyatukan jenis ralat.

See all articles