📚 Series: Belajar Golang dari Nol sampai Deploy
← Part 1: Perkenalan Part 2: Sintaks Dasar Part 3: Fungsi & Struct →

Variabel di Go

Go punya tiga cara mendeklarasikan variabel:

package main

import "fmt"

func main() {
    // Cara 1: var dengan tipe eksplisit
    var nama string = "Andi"
    var umur int = 25
    var aktif bool = true

    // Cara 2: var dengan inferensi tipe (Go tebak sendiri)
    var kota = "Jakarta"

    // Cara 3: short declaration (paling umum dipakai)
    gaji := 8000000
    tinggi := 170.5

    fmt.Println(nama, umur, aktif, kota, gaji, tinggi)
}

⚠️ Penting: Di Go, variabel yang sudah dideklarasikan wajib digunakan. Kalau tidak dipakai, program tidak bisa di-compile. Ini fitur yang disengaja untuk mencegah kode kotor.

Tipe Data Dasar

// Integer
var a int     = 42        // 64-bit di sistem 64-bit
var b int8    = 127       // -128 sampai 127
var c int16   = 32767
var d int32   = 2147483647
var e int64   = 9223372036854775807
var f uint    = 42        // unsigned (tidak bisa minus)

// Float
var x float32 = 3.14
var y float64 = 3.14159265358979  // lebih presisi

// String
var s string = "Halo Go!"
var multiline = `Ini bisa
spans beberapa baris
pakai backtick`

// Boolean
var isTrue bool = true

// Byte (alias untuk uint8) dan Rune (alias untuk int32/unicode)
var ch byte = 'A'
var r rune  = '🚀'

Zero Value

Di Go, setiap tipe data punya zero value — nilai default jika tidak diinisialisasi:

var angka int      // 0
var desimal float64 // 0
var teks string    // "" (string kosong)
var flag bool      // false
var ptr *int       // nil

Tidak ada undefined atau null yang bikin error tidak terduga seperti di bahasa lain!

Konstanta

const PI = 3.14159
const AppName = "Todo API"
const MaxRetry = 3

// Grup konstanta dengan iota (auto-increment)
const (
    StatusPending = iota // 0
    StatusDone           // 1
    StatusCancelled      // 2
)

fmt.Println(StatusPending, StatusDone, StatusCancelled) // 0 1 2

If - Else

nilai := 85

if nilai >= 90 {
    fmt.Println("A")
} else if nilai >= 80 {
    fmt.Println("B")
} else if nilai >= 70 {
    fmt.Println("C")
} else {
    fmt.Println("Remedial")
}

// If dengan initialization statement (sangat idiomatik di Go!)
if umur := 20; umur >= 18 {
    fmt.Println("Boleh masuk")
} else {
    fmt.Println("Belum cukup umur")
}
// Variabel 'umur' hanya ada di dalam if-else block ini

For Loop

Go hanya punya satu kata kunci loop: for. Tapi bisa dipakai seperti while dan foreach juga!

// For klasik (seperti C)
for i := 0; i < 5; i++ {
    fmt.Println("Iterasi ke-", i)
}

// For seperti while
n := 1
for n < 100 {
    n *= 2
}
fmt.Println(n) // 128

// For infinite loop (pakai break untuk keluar)
count := 0
for {
    count++
    if count == 3 {
        break
    }
}

// Range (untuk iterasi slice/map/string)
buah := []string{"apel", "mangga", "jeruk"}
for index, nilai := range buah {
    fmt.Printf("Index %d: %s\n", index, nilai)
}

// Abaikan index dengan _
for _, nama := range buah {
    fmt.Println(nama)
}

Switch

hari := "Senin"

switch hari {
case "Sabtu", "Minggu":
    fmt.Println("Akhir pekan!")
case "Senin":
    fmt.Println("Semangat awal minggu!")
default:
    fmt.Println("Hari kerja biasa")
}

// Switch tanpa kondisi (seperti if-else)
nilai := 75
switch {
case nilai >= 90:
    fmt.Println("Sangat bagus")
case nilai >= 70:
    fmt.Println("Bagus")
default:
    fmt.Println("Perlu belajar lebih giat")
}

Input dari User

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Masukkan nama kamu: ")
    nama, _ := reader.ReadString('\n')
    nama = strings.TrimSpace(nama)

    fmt.Printf("Halo, %s! Selamat belajar Go!\n", nama)
}

Checklist Progress

← Part 1 Part 3: Fungsi & Struct →