Nilai Nol dan Nilai Bawaan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 17 dari 107.
Di Go, setiap variabel memiliki nilai nol: nilai default yang diberikan saat kamu mendeklarasikan variabel tanpa inisialisasi eksplisit. Memahami nilai nol sangat penting saat menggunakan struct, karena field yang belum diinisialisasi otomatis menerima nilai default tersebut.
Setiap tipe memiliki nilai nolnya sendiri:
| Tipe | Nilai Nol |
|---|---|
| int, float64 | 0 |
| string | "" (string kosong) |
| bool | false |
| pointer, slice, map | nil |
Saat kamu membuat struct, setiap field yang tidak kamu tetapkan secara eksplisit akan mendapatkan nilai nolnya.
type User struct {
Name string
Age int
Active bool
}
func main() {
var u User
fmt.Println(u.Name) // "" (string kosong)
fmt.Println(u.Age) // 0
fmt.Println(u.Active) // false
}Ini juga berlaku untuk inisialisasi parsial. Hanya field yang kamu tentukan yang mendapatkan nilai khusus.
u := User{Name: "Alice"}
fmt.Println(u.Age) // 0
fmt.Println(u.Active) // false
Nilai nol membuat struct langsung dapat digunakan tanpa inisialisasi eksplisit. Namun, berhati-hatilah dengan tipe referensi seperti slice dan map. Nilai nolnya adalah nil, yang dapat menyebabkan panic saat runtime jika kamu mencoba menggunakannya tanpa inisialisasi.
Tantangan
MudahMari buat sistem profil pemain yang menunjukkan cara kerja nilai zero di Go. Kamu akan membuat profil game dengan beberapa field yang diatur secara eksplisit, sementara field lainnya menggunakan nilai zero default.
Kamu akan menyusun kodemu dalam dua file:
player.go: Definisikan structPlayerdengan field berikut:Username(string),Level(int),Score(int),IsPremium(bool), danGuildName(string). Buat juga methodDisplayProfileyang mengembalikan string berformat dan menampilkan semua informasi pemain.main.go: Baca username dari input dan buat Player dengan inisialisasi parsial saja, cukup atur fieldUsername. Lalu tampilkan profil lengkap untuk melihat cara Go mengisi field yang tidak diatur dengan nilai zero.
Input berikut akan diberikan:
- Baris 1: Username pemain
Method DisplayProfile milikmu harus mengembalikan string dengan format persis seperti ini:
Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]Misalnya, jika username-nya ShadowKnight, output-mu harus menampilkan username tersebut beserta semua nilai zero untuk field yang belum diinisialisasi:
Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: Perhatikan bahwa field Guild tidak menampilkan apa pun setelah titik dua: itulah nilai zero berupa string kosong. Tantangan ini membantumu melihat dengan tepat nilai yang Go tetapkan untuk setiap tipe saat kamu tidak memberikan nilai secara eksplisit.
Coba sendiri
package main
import (
"fmt"
)
func main() {
// Baca username dari input
var username string
fmt.Scanln(&username)
// TODO: Buat Player dengan inisialisasi parsial
// Isi hanya field Username, biarkan field lain menggunakan nilai nol
// TODO: Tampilkan profil pemain menggunakan method DisplayProfile
}
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