Episode ini memandu kalian menulis program Go pertama: struktur file, deklarasi package, import, dan go run. Kalian juga belajar tipe data dasar, variabel, konstanta, operator, fungsi dengan multiple return values, serta error handling idiomatik.

Di episode 2 kalian sudah melihat peta arsitektur Go. Sekarang saatnya tangan kalian mengetik. Episode 3 membawa kalian menulis program Go pertama dari nol, memahami struktur file dan deklarasi package, lalu menguasai tipe data, variabel, konstanta, operator, fungsi, dan error handling idiomatik.
Semua konsep di episode ini adalah batu bata untuk seluruh sisa series. Pastikan kalian menjalankan setiap contoh dengan go run di terminal, bukan sekadar membaca.
Setiap file Go diawali deklarasi package. File yang berisi entry point memakai package main dan harus memiliki fungsi main.
package main
import "fmt"
func main() {
fmt.Println("Halo, dunia Go!")
}Jalankan dengan go run main.go. Perintah ini mengompilasi file sementara lalu mengeksekusinya. Untuk menghasilkan binary permanen, pakai go build main.go lalu jalankan ./main.
Go sangat disiplin: import yang tidak dipakai dan variabel yang dideklarasikan tetapi tidak digunakan menjadi error kompilasi, bukan sekadar warning. Variabel yang memang tidak dipakai bisa ditampung dengan _ (blank identifier).
Go menyediakan tipe dasar lengkap: bool, string, integer seperti int dan int64, float seperti float64, serta byte alias uint8 dan rune alias int32. Pemilihan tipe integer yang tepat penting untuk efisiensi memori.
package main
import "fmt"
func main() {
var nama string = "Arman"
var umur int = 30
aktif := true
const versi = "1.23.0"
fmt.Println(nama, umur, aktif, versi)
}Sintaks aktif := true adalah short variable declaration — tipe diturunkan dari nilai. Konstanta dideklarasikan dengan const dan tidak bisa diubah setelah inisialisasi.
Go mendukung operator aritmatika, perbandingan, dan logika standar. Keunikan Go: operator ++ dan -- adalah pernyataan, bukan ekspresi — jadi x = x++ tidak valid.
package main
import "fmt"
func main() {
a, b := 10, 3
fmt.Println("jumlah:", a+b)
fmt.Println("bagi:", a/b)
fmt.Println("modulo:", a%b)
fmt.Println("perbandingan:", a > b)
}Fungsi dideklarasikan dengan kata kunci func. Salah satu ciri khas Go: fungsi bisa mengembalikan beberapa nilai sekaligus. Pola paling umum adalah mengembalikan hasil dan error bersama-sama.
package main
import "fmt"
func bagi(a, b float64) (float64, error) {
if b == 0 {
return 0, fmt.Errorf("tidak bisa membagi dengan nol")
}
return a / b, nil
}
func main() {
hasil, err := bagi(10, 4)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println("hasil:", hasil)
}Perhatikan fmt.Errorf("...") membungkus pesan error dan nil menandakan tidak ada error. Pola hasil, err := ... lalu cek if err != nil adalah idiom yang mendominasi seluruh ekosistem Go.
Go menangani error secara eksplisit: setiap operasi yang bisa gagal mengembalikan error sebagai nilai, dan pemanggil wajib memeriksanya. Tidak ada exception yang melompat antar fungsi. Alur error selalu terlihat dan diperlakukan sebagai data biasa.
package main
import (
"fmt"
"strconv"
)
func main() {
teks := "123"
angka, err := strconv.Atoi(teks)
if err != nil {
fmt.Println("konversi gagal:", err)
return
}
fmt.Println("angka:", angka+1)
}strconv.Atoi mengonversi string ke integer dan mengembalikan error ketika input tidak valid.
Saat error dipropagasikan ke atas, biasakan membungkusnya dengan %w agar konteks lapisan atas tetap tercatat tanpa kehilangan error aslinya:
func simpanFile(path string) error {
file, err := os.Create(path)
if err != nil {
return fmt.Errorf("gagal membuat file: %w", err)
}
defer file.Close()
return nil
}Format %w membuat error asli tetap bisa diakses dengan errors.Is dan errors.As — detail lengkapnya akan kita bedah di episode 6.
Error "declared and not used" muncul ketika variabel tidak dipakai; hapus variabelnya atau ganti dengan _. Short declaration := hanya valid di dalam fungsi, di level package gunakan var. Selain itu, Go tidak mengonversi tipe secara implisit — int dan float64 tidak bisa dijumlahkan langsung tanpa konversi eksplisit seperti float64(a).
Latihan kecil di sini melatih kalian berpikir tentang tipe sejak awal. Disiplin seperti ini yang membuat kode Go mudah dibaca oleh orang lain di tim besar.
Episode 3 adalah fondasi sintaksis kalian: struktur file Go dengan package main dan fungsi main, tipe data dasar, variabel dan konstanta, operator, fungsi dengan multiple return values, dan pola error handling idiomatik dengan if err != nil.
Inti yang harus dibawa pulang:
main adalah entry point.:= untuk short declaration, const untuk nilai tetap.%w untuk membungkus error agar konteks terjaga.Di episode 4 selanjutnya kita akan membahas modularisasi, paket, dan manajemen dependensi — membuat modul dengan go mod init, import package lokal dan eksternal, mengelola versi modul, serta menulis paket reusable dengan dokumentasi go doc. Kode kalian akan mulai terorganisasi sebagai proyek sungguhan.