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 package di baris pertama
  • Program yang bisa dijalankan langsung wajib menggunakan package main
  • Library atau kode yang dipakai program lain menggunakan nama package lain (misalnya package utils atau package 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 function
  • main — nama function (untuk program utama, nama ini harus persis main)
  • () — 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:

FunctionPerilakuKapan dipakai
fmt.Print()Cetak tanpa newline di akhirKetika output dilanjutkan di baris yang sama
fmt.Println()Cetak dengan newline di akhirKebanyakan kasus umum
fmt.Printf()Cetak dengan format stringKetika 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

  1. Modifikasi main.go agar mencetak tiga baris berbeda menggunakan tiga pemanggilan fmt.Println. Baris pertama nama kamu, baris kedua bahasa pemrograman favorit, baris ketiga alasan kamu belajar Go.

  2. Ubah salah satu fmt.Println menjadi fmt.Printf dengan minimal satu format specifier. Sisipkan variabel string ke dalam output menggunakan %s.

  3. Coba hapus baris import "fmt" lalu jalankan go run main.go. Baca error message-nya. Sekarang tambahkan kembali import "fmt" tapi hapus semua pemanggilan fmt.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.

Referensi

  1. 1Package fmt — Go Standard Library
  2. 2How to Write Go Code — The Go Programming Language
  3. 3A Tour of Go — Packages