BAB 6: Variabel — Menyimpan dan Mengelola Data
Pelajari cara menyimpan dan mengelola data menggunakan variabel di Go — dari deklarasi var, shorthand :=, zero value, hingga scope dan blank identifier.
Semua program yang kamu tulis sejauh ini bekerja dengan nilai yang langsung tertanam di kode — "Hello, Go!", angka literal, teks tetap. Begitu program selesai dijalankan, tidak ada yang tersisa. Untuk membuat program yang benar-benar berguna, kamu butuh cara menyimpan data, mengubahnya, dan meneruskannya dari satu bagian program ke bagian lain. Itulah peran variabel.
Di Go, variabel bukan sekadar wadah — setiap variabel punya tipe yang ditentukan di awal dan tidak bisa berubah. Ini berbeda dari JavaScript atau Python yang lebih fleksibel, tapi justru inilah yang membuat program Go lebih mudah diprediksi dan lebih jarang mengandung bug tersembunyi.
Dua Cara Mendeklarasikan Variabel
Go memberikan dua sintaks untuk mendeklarasikan variabel, masing-masing dengan konteks penggunaan yang berbeda.
Keyword var
var adalah cara paling eksplisit. Kamu menyebutkan nama variabel dan tipenya secara tertulis:
// main.go
package main
import "fmt"
func main() {
var nama string = "Gopher"
var umur int = 3
var tinggi float64 = 165.5
var aktif bool = true
fmt.Println(nama, umur, tinggi, aktif)
}
Jika nilai awal sudah diberikan, tipe boleh dihilangkan — Go akan menyimpulkannya sendiri:
var nama = "Gopher" // Go tahu ini string
var umur = 3 // Go tahu ini int
var juga bisa digunakan di luar function, di level package. Ini yang membedakannya dari :=.
Short variable declaration :=
Di dalam function, ada sintaks yang lebih ringkas:
// main.go
package main
import "fmt"
func main() {
nama := "Gopher"
umur := 3
tinggi := 165.5
fmt.Println(nama, umur, tinggi)
}
:= mendeklarasikan sekaligus menginisialisasi variabel. Go menyimpulkan tipenya dari nilai yang diberikan. Ini yang paling sering kamu lihat dalam kode Go sehari-hari.
:= hanya bisa digunakan di dalam function. Mencoba memakainya di level package akan menghasilkan compile error: syntax error: non-declaration statement outside function body.
Deklarasi Grup
Ketika mendeklarasikan beberapa variabel sekaligus — terutama di level package — sintaks grup lebih rapi:
// main.go
package main
import "fmt"
var (
serverHost = "localhost"
serverPort = 8080
serverSSL = false
)
func main() {
fmt.Println(serverHost, serverPort, serverSSL)
}
Di dalam function, multiple assignment dengan := juga bisa dilakukan dalam satu baris:
nama, umur, aktif := "Gopher", 3, true
Zero Value
Salah satu keputusan desain Go yang menarik: setiap variabel yang dideklarasikan tanpa nilai awal otomatis mendapat zero value sesuai tipenya. Tidak ada variabel yang “tidak diinisialisasi” di Go.
// main.go
package main
import "fmt"
func main() {
var angka int
var teks string
var aktif bool
var desimal float64
fmt.Printf("int: %d\n", angka) // int: 0
fmt.Printf("string: %q\n", teks) // string: ""
fmt.Printf("bool: %t\n", aktif) // bool: false
fmt.Printf("float64: %f\n", desimal) // float64: 0.000000
}
Zero value untuk setiap tipe dasar:
| Tipe | Zero value |
|---|---|
int, int64, dll | 0 |
float32, float64 | 0.0 |
string | "" |
bool | false |
| pointer, slice, map, channel | nil |
Ini berguna saat kamu mendeklarasikan variabel yang nilainya akan diisi nanti berdasarkan kondisi tertentu.
Mengubah Nilai Variabel
Setelah dideklarasikan, nilai variabel bisa diubah dengan assignment biasa menggunakan =:
// main.go
package main
import "fmt"
func main() {
skor := 0
// simulasi penambahan skor
skor = 10
fmt.Println("Skor setelah level 1:", skor)
skor = skor + 25
fmt.Println("Skor setelah level 2:", skor)
}
Go juga mendukung multiple assignment dalam satu baris, yang sangat berguna untuk menukar nilai dua variabel:
a, b := 10, 20
a, b = b, a // tukar nilai tanpa variabel sementara
fmt.Println(a, b) // 20 10
Scope Variabel
Scope menentukan di bagian mana sebuah variabel bisa diakses. Di Go, scope mengikuti blok kode yang ditandai kurung kurawal { }.
Variabel yang dideklarasikan di level package bisa diakses dari semua function dalam package yang sama. Variabel yang dideklarasikan di dalam function hanya bisa diakses di dalam function itu. Variabel di dalam blok if, for, atau blok lain hanya bisa diakses di dalam blok tersebut.
// main.go
package main
import "fmt"
var appName = "KalkulatorGo" // bisa diakses di seluruh package
func main() {
versi := "1.0" // hanya bisa diakses di dalam main()
if true {
pesan := "Siap digunakan" // hanya bisa diakses di dalam blok if ini
fmt.Println(appName, versi, pesan)
}
// fmt.Println(pesan) // compile error: undefined: pesan
fmt.Println(appName, versi)
}
Deklarasikan variabel sedekat mungkin dengan tempat pertama kali digunakan. Ini membuat kode lebih mudah dibaca karena pembaca tidak perlu scroll ke atas untuk mencari tahu apa isi variabel tersebut.
Blank Identifier
Beberapa function di Go mengembalikan lebih dari satu nilai. Jika kamu hanya butuh sebagian, gunakan _ (blank identifier) untuk mengabaikan nilai yang tidak diperlukan:
// main.go
package main
import "fmt"
func infoUser() (string, int) {
return "Gopher", 3
}
func main() {
// hanya butuh nama, abaikan umur
nama, _ := infoUser()
fmt.Println(nama)
// hanya butuh umur, abaikan nama
_, umur := infoUser()
fmt.Println(umur)
}
_ bukan variabel sungguhan — nilainya langsung dibuang. Go tidak akan mengeluh soal “variabel tidak digunakan” untuk _.
var vs := — Kapan Pakai yang Mana
Dalam praktik sehari-hari, pilihan antara var dan := cukup sederhana:
Gunakan := untuk variabel lokal di dalam function — lebih singkat dan lebih idiomatis di Go. Gunakan var ketika mendeklarasikan di level package, atau ketika kamu sengaja ingin variabel dimulai dengan zero value tanpa memberikan nilai awal:
var hasil int // sengaja dimulai dari 0, akan diisi nanti
Gunakan var juga ketika tipe perlu dinyatakan secara eksplisit karena nilainya ambigu:
var angka float64 = 10 // tanpa ini, Go akan menyimpulkan int
Latihan
-
Buat program yang mendeklarasikan empat variabel: nama (string), umur (int), tinggi (float64), dan aktif (bool). Isi dengan data kamu sendiri menggunakan
:=, lalu cetak semuanya denganfmt.Printfmenggunakan format specifier yang tepat. -
Deklarasikan dua variabel
adanbdengan nilai berbeda, lalu tukar nilainya menggunakan multiple assignment. Cetak nilai sebelum dan sesudah penukaran. -
Deklarasikan variabel
counterbertipeinttanpa nilai awal. Cetak zero value-nya, lalu tambahkan nilai ke dalamnya tiga kali dalam tiga baris terpisah. Cetak hasilnya setiap kali.
Variabel menyimpan data, tapi selama ini kita belum benar-benar memperhatikan jenis data yang disimpan. Kenapa 10 dan 10.5 diperlakukan berbeda? Kenapa tidak semua angka bisa saling dijumlahkan langsung? Jawabannya ada di tipe data — dan itu yang akan kita bahas di bab berikutnya.