Variabel & Tipe Data — Go

Variabel & Tipe Data Go Go adalah bahasa statically typed — setiap variabel memiliki tipe yang sudah ditentukan saat kompilasi. Deklarasi Variabel //…

Variabel adalah nama untuk menyimpan sebuah nilai, dan di Go tiap variabel punya tipe yang tetap: angka bulat, angka desimal, teks, atau benar/salah. Bayangin kotak-kotak di etalase Warung Bakso Mas Bimo. Tiap kotak diberi label nama dan label isi: kotak porsi khusus angka bulat, kotak menu khusus teks. Kotak angka gak bisa diisi teks, dan isinya gak pernah berubah jenis diam-diam. Itu yang disebut statically typed: tipe dicek compiler sebelum program jalan.

🧪 Tebakan cepat: porsi := 3 dan harga := 15000.0. Kalau kamu menulis fmt.Println(porsi * harga), apa yang terjadi: tercetak 45000, atau compile gagal? Tebak dulu, jawabannya ada di bagian "Konversi harus ditulis sendiri".

Dua cara bikin variabel: var dan :=

package main

import "fmt"

var warung = "Warung Bakso Mas Bimo" // level package: wajib var

func main() {
	var menu string = "Bakso urat" // var, nama, tipe, nilai
	porsi := 3                     // := menebak tipenya: int
	harga := 15000.0               // ada .0, jadi float64
	lunas := true                  // bool

	porsi = 4 // ganti nilai: cukup =
	fmt.Println(warung, menu, porsi, harga, lunas)
}
$ go run bakso.go
Warung Bakso Mas Bimo Bakso urat 4 15000 true

Empat tipe dasar

Tipe Contoh Isinya
int 3, 15000, -2 angka bulat
float64 15000.0, 0.1 angka desimal
string "Bakso urat" teks, selalu kutip ganda
bool true, false benar atau salah

Uang rupiah paling aman disimpan sebagai int, karena angka desimal bisa punya selisih pembulatan kecil. Isi variabel yang tipenya beda ditolak: var porsi int = "tiga" gagal dengan cannot use "tiga" (untyped string constant) as int value in variable declaration.

Zero value: gak pernah kosong

Variabel yang dibuat dengan var tanpa nilai langsung diisi zero value, nilai nol untuk tipenya. Di Go gak ada variabel yang isinya undefined.

var porsi int     // 0
var harga float64 // 0
var menu string   // "" (teks kosong)
var lunas bool    // false
fmt.Println(porsi, harga, menu, lunas)
0 0  false

Ada dua spasi di tengah output itu: menu adalah teks kosong, jadi di antara 0 dan false cuma ada spasi pemisahnya.

Konversi harus ditulis sendiri

Go gak pernah mengubah tipe diam-diam. int dikali float64 ditolak:

package main

import "fmt"

func main() {
	porsi := 3
	harga := 15000.0
	fmt.Println(porsi * harga)
}
$ go run bakso.go
# command-line-arguments
./bakso.go:8:14: invalid operation: porsi * harga (mismatched types int and float64)

Itu jawaban tebakannya: compile gagal, gak ada yang tercetak. Ubah tipenya sendiri dengan menulis nama tipe seperti fungsi: float64(porsi) * harga hasilnya 45000. Arah sebaliknya, int(x) dengan x := 15999.9, membuang pecahannya jadi 15999, bukan dibulatkan.

Mencetak dengan fmt.Printf

fmt.Printf mencetak teks dengan pola. Tiap verb (kata format yang diawali %) diganti nilai berikutnya, berurutan:

menu := "Bakso urat"
porsi := 3
harga := 15000.0
fmt.Printf("%s: %d porsi\n", menu, porsi)
fmt.Printf("%q %v %.2f %T\n", menu, porsi, harga, harga)
Bakso urat: 3 porsi
"Bakso urat" 3 15000.00 float64

⚠️ Jebakan yang sering ketemu

TL;DR: Variabel Go punya tipe tetap. var nama tipe = nilai bisa di mana saja, nama := nilai cuma di dalam fungsi dan tipenya ditebak dari nilainya. := membuat variabel baru, = mengganti isinya. Empat tipe dasar: int, float64, string, bool. Variabel tanpa nilai dapat zero value: 0, 0, "", false. Tipe gak pernah berubah diam-diam: int dikali float64 itu error, tulis float64(porsi). fmt.Printf mengisi verb berurutan: %s teks, %d angka bulat, %v apa saja, %q teks berkutip, %.2f dua desimal, %T tipe, dan \n untuk pindah baris.

Yang akan kamu pelajari