Lompati ke konten utama
Modul 1 · Pelajaran 2 dari 52/50 dalam kursus~10 min
Pelajaran modul (2/5)

Nilai nol dan ketik konversi

Di Go, setiap variabel yang dideklarasikan tanpa nilai eksplisit menerima a nilai nol: "nilai netral" dari jenisnya. Ini perbedaan yang sangat besar dari JavaScript, di mana let x; menghasilkan undefined, atau C, di mana Anda mengakhiri dengan memori sampah. Tidak ada undefined, tidak ada UB: nol saja.

Tabel nilai nol

KategoriKetikNilai nol
Numerikint, int64, float32, float64, uint, ...0
Booleanboolfalse
Talistring"" (string kosong)
Penunjuk*Tnil
Irisan / Peta / Saluran[]T, map[K]V, chan Tnil
Fungsi / Antarmukafunc(...), interface{...}nil
StrukturT struct{...}semua bidang pada nilai nol
Go
var i int        // 0
var f float64    // 0
var s string     // ""
var b bool       // false
var p *int       // nil
var nums []int   // nil  (NB: una slice nil ha len 0 e si può iterare!)

Konversi SELALU eksplisit

Tidak seperti C, Python, atau JS, Go tidak secara otomatis mempromosikan hal tersebut tipe numerik ke tipe lain: Anda harus menulis type(value).

Go
i := 42
var f float64 = float64(i)
var u uint = uint(i)

Hal ini berlaku bahkan untuk tipe yang "kompatibel" seperti int dan int64: an konversi eksplisit selalu diperlukan.

Go
var a int = 10
var b int64 = int64(a)  // obbligatorio

Konversi antar angka: hati-hati terhadap pemotongan

Beralih dari float64 ke int terpotong menuju nol, tidak bulat:

Go
f := 3.9
i := int(f)   // 3, non 4
n := int(-3.9) // -3, non -4

Konversi string ↔ angka

string(65) TIDAK memberikan "65": ia memberikan "A" (rune dengan kode poin 65). Untuk string → angka dan sebaliknya Anda memerlukan strconv paket:

Go
import "strconv"

s := strconv.Itoa(42)        // "42"
n, err := strconv.Atoi("42") // 42, nil

Kami akan membahasnya secara mendalam di modul Stdlib.

Giliranmu

Latihan#go.m1.l2.e1
Upaya: 0Memuat…

Deklarasikan penghitung variabel bertipe int tanpa menginisialisasinya dan mencetaknya. Diharapkan: 0.

Memuat editor…
Tunjukkan petunjuk

Tanpa penginisialisasi, variabel mengambil nilai nol dari tipenya.

Solusi tersedia setelah 3 upaya

Latihan#go.m1.l2.e2
Upaya: 0Memuat…

Mengingat bilangan bulat n=10, ubah n menjadi float64 dan bagi dengan 4. Cetak hasilnya (diharapkan 2,5).

Memuat editor…
Tunjukkan petunjuk

Tanpa konversi eksplisit, `n / 4` adalah pembagian bilangan bulat yang menghasilkan 2.

Solusi tersedia setelah 3 upaya

Quiz#go.m1.l2.e3
Siap

Apa yang dicetak kode ini?

Go
f := 3.7
fmt.Println(int(f))
Pilihan jawaban

Rekap

  • Setiap tipe memiliki nilai nol yang konsisten: tidak ada undefined, tidak ada UB.
  • Slice/map/chan/func/interface/pointer memiliki nilai nol nil.
  • Konversi numerik selalu eksplisit dengan type(value).
  • int(float) terpotong menuju nol; untuk membulatkan gunakan math.Round.
  • Untuk string ↔ nomor gunakan paket strconv (BUKAN cast langsung).