Struct Anonim
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 15 dari 107.
struct anonim adalah struct tanpa tipe bernama. Kamu menentukan strukturnya dan membuat instance dalam satu langkah, tanpa menggunakan kata kunci type.
person := struct {
Name string
Age int
}{
Name: "Alice",
Age: 30,
}Ini membuat nilai struct secara langsung tanpa mendeklarasikan tipe yang dapat digunakan kembali. struct anonim berguna saat kamu membutuhkan struktur data sekali pakai dengan cepat yang tidak akan digunakan di bagian lain kodemu.
Kasus penggunaan yang umum adalah mengelompokkan data terkait untuk satu fungsi atau pengujian.
config := struct {
Host string
Port int
}{
Host: "localhost",
Port: 8080,
}
fmt.Println(config.Host) // localhoststruct anonim juga populer dalam pengujian berbasis tabel, saat setiap kasus uji memiliki field yang unik.
tests := []struct {
input int
expected int
}{
{1, 2},
{5, 10},
}Karena struct anonim tidak memiliki nama tipe, kamu tidak dapat mendefinisikan method untuknya atau menggunakan kembali tipe tersebut di tempat lain. Gunakan struct anonim untuk mengelompokkan data sementara dan lokal. Untuk apa pun yang akan kamu rujuk beberapa kali, definisikan tipe struct bernama.
Tantangan
MudahMari buat sistem konfigurasi sederhana yang menunjukkan keunggulan struct anonim untuk mengelompokkan data sekali pakai yang tidak memerlukan tipe yang dapat digunakan kembali.
Kamu akan mengatur kodemu dalam dua file:
config.go: Buat fungsi bernamaGetServerConfigyang menerima nama server (string), port (int), dan mode debug (bool) sebagai parameter. Fungsi ini harus mengembalikan struct anonim yang berisi ketiga nilai ini sebagai field:Name,Port, danDebug. Karena konfigurasi ini hanya digunakan di satu tempat, kamu tidak perlu mendefinisikan tipe bernama untuknya.main.go: Baca nilai konfigurasi server dari input, panggil fungsiGetServerConfig, lalu tampilkan detail konfigurasi.
Input berikut akan diberikan:
- Baris 1: Nama server
- Baris 2: Nomor port
- Baris 3: Mode debug (
trueataufalse)
Format output:
Server: [Name]
Port: [Port]
Debug: [Debug]Contohnya, jika diberikan api-server, 8080, dan true, outputmu seharusnya:
Server: api-server
Port: 8080
Debug: truePerhatikan bagaimana struct anonim memungkinkanmu mengembalikan data yang dikelompokkan tanpa memenuhi codebase-mu dengan tipe yang hanya digunakan sekali.
Coba sendiri
package main
import (
"fmt"
)
func main() {
// Baca nilai input
var name string
var port int
var debug bool
fmt.Scanln(&name)
fmt.Scanln(&port)
fmt.Scanln(&debug)
// TODO: Panggil GetServerConfig dengan nilai input
// dan simpan struct anonim yang dikembalikan
// TODO: Cetak konfigurasi dalam format yang diminta:
// Server: [Name]
// Port: [Port]
// Debug: [Debug]
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP di Go
File EksternalWorkspace Go dan modulePaket dan ImporNama yang Diekspor dan Tidak DieksporPengantar OOP di Gostruct sebagai classMendefinisikan method pada structPointer receiver vs value receiverInisialisasi structFungsi KonstruktorUlasan: Kalkulator Sederhana4Interface
Pengenalan InterfaceImplementasi ImplisitInterface sebagai KontrakInterface Kosong (any)Type AssertionType SwitchKomposisi InterfaceInterface Stringer & ErrorUlasan: Kalkulator Bentuk7Enkapsulasi
Field yang Diekspor vs Tidak DieksporEnkapsulasi Tingkat PackageMethod Getter dan SetterPenyembunyian Informasi di GoRingkasan: Data Siswa10Generics (Go 1.18+)
Pengantar GenericsParameter TipeBatasan TipeStruct GenerikCara Alternatif untuk Method GenerikRingkasan Koleksi Generik2Mendalami Tipe dan Struct
Tipe Dasar dan KompositDefinisi Tipe KustomTag StructStruct AnonimStruct BersarangNilai Nol dan Nilai BawaanRangkuman: Buku Kontak5Komposisi daripada Pewarisan
Mengapa Go Tidak Memiliki PewarisanDasar Penyematan StructPromosi methodMenyematkan Beberapa StructPenyematan vs AgregasiMembayangi method yang DisematkanRangkuman: Hierarki Karyawan8Penanganan Error & OOP
Interface errorTipe Error KustomPembungkusan Error (fmt.Errorf)Error Sentinelerrors.Is() dan errors.As()Panic, Defer, dan RecoverRangkuman: Parser File3Pointer dan Memori
Dasar-Dasar Pointer di GoPointer ke StructPass by Value vs ReferenceFungsi new()Garbage Collection di GoRekap: Pembuat Linked List6Polimorfisme di Go
Polimorfisme melalui InterfaceDuck Typing di GoAturan Pemenuhan InterfaceKoleksi PolimorfikInjeksi DependensiRangkuman: Pemroses Pembayaran9Konkruensi & OOP
Dasar-dasar GoroutineChannel & KomunikasiChannel Ber-buffer vs Tanpa BufferPernyataan selectsync.Mutex & sync.RWMutexsync.WaitGroupDesain Struct yang Aman untuk ThreadRingkasan: Worker PoolLatihan sendiri: Compiler Go online