BAB 4: Hello World - Program Pertama Go
Bedah anatomi program Go pertama kamu baris per baris. Pahami kenapa package main wajib ada, apa peran import, dan bagaimana func main menjadi pintu masuk eksekusi.
Di akhir bab sebelumnya, kamu sudah menulis main.go yang pertama — singkat, langsung jalan, dan mungkin belum sepenuhnya kamu pahami kenapa strukturnya seperti itu. Kenapa harus ada package main? Kenapa import? Kenapa func main()? Bab ini menjawab semua pertanyaan itu dengan membedah setiap baris kode yang sudah kamu tulis.
Tradisi “Hello World” di dunia programming bukan sekadar ritual. Program sesederhana itu memuat hampir semua konsep fundamental yang akan terus kamu pakai — package, import, function, dan output. Memahaminya sekarang akan membuat segalanya jauh lebih mudah ke depannya.
Anatomi Program Go
Mari lihat kembali kode yang sudah kamu buat:
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
Empat komponen di sini — package, import, func main, dan pemanggilan function — akan muncul lagi dan lagi di setiap program Go yang kamu tulis.
Package: Identitas File
Setiap file Go harus dimulai dengan deklarasi package. Ini bukan opsional.
package main
Package adalah cara Go mengelompokkan kode yang berkaitan. Bayangkan seperti departemen di perusahaan — departemen keuangan punya fungsinya sendiri, departemen IT punya fungsinya sendiri, dan keduanya tidak saling campur.
package main adalah package spesial. Ini memberi tahu Go bahwa file ini adalah program yang bisa dieksekusi langsung — bukan library yang dipakai program lain. Tanpa package main, Go tidak akan menghasilkan binary yang bisa dijalankan.
Aturan yang perlu diingat:
- Semua file Go harus punya deklarasi
packagedi baris pertama - Program yang bisa dijalankan langsung wajib menggunakan
package main - Library atau kode yang dipakai program lain menggunakan nama package lain (misalnya
package utilsataupackage database)
Import: Meminjam Kapabilitas
import "fmt"
Go datang dengan banyak package bawaan yang siap pakai — tapi semuanya harus diminta secara eksplisit. import adalah cara kamu meminta package tertentu agar bisa digunakan di file ini.
Package fmt (singkatan dari format) berisi function untuk input dan output: mencetak teks ke terminal, membaca input pengguna, dan memformat string. Tanpa baris import "fmt", Go tidak akan mengenal fmt.Println di baris berikutnya.
Ketika project tumbuh dan kamu butuh beberapa package sekaligus, gunakan sintaks grup:
import (
"fmt"
"math"
"strings"
)
Go tidak mengizinkan import yang tidak digunakan. Jika kamu mengimpor "math" tapi tidak memakainya di kode, Go akan menolak mengompilasi dan memberikan error. Ini fitur yang disengaja — untuk menjaga kode tetap bersih.
Func Main: Pintu Masuk Eksekusi
func main() {
fmt.Println("Hello, Go!")
}
func main() adalah titik di mana program mulai dijalankan. Ketika kamu mengetik go run main.go, Go mencari function bernama main di dalam package main, lalu menjalankan semua kode di dalamnya dari atas ke bawah.
Struktur function di Go:
func— keyword untuk mendefinisikan functionmain— nama function (untuk program utama, nama ini harus persismain)()— kurung untuk parameter; kosong berarti tidak ada parameter{ }— kurung kurawal mengapit isi function
Mencetak Output
fmt.Println("Hello, Go!")
fmt.Println adalah function dari package fmt yang mencetak teks ke terminal dan otomatis menambah baris baru di akhir. Cara membacanya: “dari package fmt, panggil function Println”.
Package fmt punya tiga function utama untuk output:
| Function | Perilaku | Kapan dipakai |
|---|---|---|
fmt.Print() | Cetak tanpa newline di akhir | Ketika output dilanjutkan di baris yang sama |
fmt.Println() | Cetak dengan newline di akhir | Kebanyakan kasus umum |
fmt.Printf() | Cetak dengan format string | Ketika perlu menyisipkan variabel ke dalam teks |
Contoh ketiga function itu dalam aksi:
// main.go
package main
import "fmt"
func main() {
// Print: tanpa newline
fmt.Print("Halo ")
fmt.Print("dunia")
fmt.Print("\n") // newline manual
// Println: otomatis newline
fmt.Println("Belajar Go")
// Printf: dengan format
nama := "Gopher"
versi := 1.24
fmt.Printf("Halo, %s! Go versi %.2f\n", nama, versi)
}
Output:
Halo dunia
Belajar Go
Halo, Gopher! Go versi 1.24
Format specifier yang sering dipakai di Printf: %s untuk string, %d untuk integer, %f untuk float, %v untuk nilai apapun (generic), dan %T untuk tipe data.
Menjalankan dan Membangun Program
Dari bab sebelumnya kamu sudah kenal go run. Ada satu perintah lagi yang penting:
# Jalankan langsung (tanpa menghasilkan file)
go run main.go
# Kompilasi menjadi binary
go build -o hello main.go
./hello
go run cocok saat pengembangan — cepat, tidak menyisakan file. go build dipakai saat kamu ingin mendistribusikan program karena menghasilkan binary yang bisa dijalankan tanpa Go terinstal.
Error yang Sering Muncul
Beberapa error yang hampir pasti kamu temui sebagai pemula, dan cara membacanya:
undefined: fmt — kamu menggunakan fmt.Println tapi lupa menuliskan import "fmt". Tambahkan import-nya.
imported and not used: "fmt" — kamu mengimpor fmt tapi tidak memakainya. Hapus importnya atau tambahkan kode yang menggunakannya.
syntax error: unexpected } — ada kurung kurawal yang tidak berpasangan. Periksa apakah setiap { punya pasangan }.
cannot find package "fmt" in any of ... — instalasi Go bermasalah. Jalankan go env GOROOT untuk memeriksa apakah path-nya benar.
Go sangat ketat soal kode yang tidak dipakai. Import yang tidak digunakan dan variabel yang dideklarasikan tapi tidak dipakai keduanya menghasilkan compile error, bukan sekadar warning. Ini berbeda dari banyak bahasa lain dan butuh waktu untuk terbiasa.
Latihan
-
Modifikasi
main.goagar mencetak tiga baris berbeda menggunakan tiga pemanggilanfmt.Println. Baris pertama nama kamu, baris kedua bahasa pemrograman favorit, baris ketiga alasan kamu belajar Go. -
Ubah salah satu
fmt.Printlnmenjadifmt.Printfdengan minimal satu format specifier. Sisipkan variabel string ke dalam output menggunakan%s. -
Coba hapus baris
import "fmt"lalu jalankango run main.go. Baca error message-nya. Sekarang tambahkan kembaliimport "fmt"tapi hapus semua pemanggilanfmt.Println. Jalankan lagi. Error apa yang muncul kali ini?
Kode yang kamu tulis sejauh ini hanya bisa menampilkan teks yang sudah ditentukan sejak awal. Bagaimana kalau kamu ingin menyimpan nama, angka, atau hasil perhitungan? Itulah yang akan kita bahas di bab berikutnya — variabel sebagai cara Go menyimpan dan mengelola data selama program berjalan.