Inisialisasi struct
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 9 dari 107.
Go menyediakan beberapa cara untuk menginisialisasi struct, masing-masing berguna dalam situasi yang berbeda.
Inisialisasi field bernama
type Person struct {
Name string
Age int
City string
}
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}Inisialisasi posisional (urutan harus sesuai dengan deklarasi field)
p2 := Person{"Bob", 30, "London"}Inisialisasi nilai nol (semua field mendapatkan nilai default)
p3 := Person{}
// Name: "", Age: 0, City: ""
Inisialisasi parsial (field yang tidak diatur mendapat nilai nol)
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""
Pointer ke struct menggunakan &
p5 := &Person{
Name: "Diana",
Age: 28,
City: "Paris",
}
fmt.Println(p5.Name) // DianaMenggunakan var, lalu mengisi field
var p6 Person
p6.Name = "Eve"
p6.Age = 22Inisialisasi field bernama adalah pendekatan yang paling umum dan mudah dibaca. Gunakan & saat kamu membutuhkan pointer ke struct.
Tantangan
SedangBuat tiga Player object dengan metode inisialisasi yang berbeda:
- player1: Inisialisasi field bernama menggunakan nilai input
- player2: Inisialisasi field bernama dengan Name: "Guest", Class: "Novice", HitPoints: 50
- player3: Gunakan deklarasi
var, lalu tetapkan setiap field satu per satu
Coba sendiri
package main
import "fmt"
func main() {
var name, class string
var hp int
fmt.Scan(&name, &class, &hp)
// TODO: Buat player1 dengan inisialisasi field bernama menggunakan nilai input
// TODO: Buat player2 dengan inisialisasi field bernama:
// Name: "Guest", Class: "Novice", HitPoints: 50
// TODO: Buat player3 dengan deklarasi var, lalu tetapkan nilai field:
// Name: "Hero", Class: "Knight", HitPoints: 200
fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}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