Package errors, os, dan flag di Golang

Setelah memahami dasar penggunaan package fmt, kini kita lanjut ke tiga package penting lainnya dalam standard library Golang: errors, os, dan flag. Ketiganya sering digunakan dalam pembuatan aplikasi CLI (Command Line Interface) dan sangat berguna untuk menangani error, akses sistem operasi, dan parsing argumen dari command line.
1. Package errors – Membuat dan Menangani Error
Go menggunakan pendekatan eksplisit dalam menangani error, bukan exception seperti di banyak bahasa lain. Untuk membuat error baru, kita bisa menggunakan package errors.
📦 Import
import "errors"🧪 Contoh Penggunaan
package main
import (
"errors"
"fmt"
)
func bagi(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("tidak bisa membagi dengan nol")
}
return a / b, nil
}
func main() {
hasil, err := bagi(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Hasil:", hasil)
}
}✅ Penjelasan
* [errors.New](http://errors.New)() membuat objek error baru.
* Biasanya error dikembalikan dari fungsi dan dicek dengan if err != nil.
2. Package os – Akses Sistem Operasi
Package os digunakan untuk:
* Mengakses environment variable
* Membaca/menulis file
* Keluar dari program
* Menangani argumen command line (os.Args)
📦 Import
import "os"🧪 Contoh: Membaca Argumen
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("Argumen command line:", os.Args)
}> os.Args adalah slice []string yang berisi argumen saat program dijalankan. Index 0 adalah nama program itu sendiri.
🧪 Contoh: Keluar dari Program
os.Exit(1) // Keluar dari program dengan kode status 13. Package flag – Parsing Argumen Command Line
Package flag digunakan untuk membaca dan memproses argumen dari command line dengan cara yang lebih terstruktur. Ini sangat berguna saat kamu membuat aplikasi CLI yang menerima input seperti --port=8080, --debug=true, dan sebagainya.
📦 Import
import "flag"🎯 Fungsi-Fungsi Utama
* flag.String(name, default, description)
Untuk membuat flag berupa string.
* [flag.Int](http://flag.Int)(name, default, description)
Untuk membuat flag berupa integer.
* flag.Bool(name, default, description)
Untuk membuat flag berupa boolean (true/false).
* flag.Parse()
Digunakan untuk membaca flag setelah didefinisikan.
> Nilai dari flag disimpan dalam *pointer*, jadi perlu diakses dengan *flagVariable.
🧪 Contoh Penggunaan
package main
import (
"flag"
"fmt"
)
func main() {
// Definisi flags
nama := flag.String("nama", "Guest", "Nama pengguna")
umur := flag.Int("umur", 0, "Umur pengguna")
debug := flag.Bool("debug", false, "Mode debug")
// Parsing input dari CLI
flag.Parse()
// Menggunakan hasilnya
fmt.Println("Nama:", *nama)
fmt.Println("Umur:", *umur)
fmt.Println("Debug mode:", *debug)
}🚀 Cara Menjalankan
Misalkan kamu menyimpan file di main.go, jalankan seperti ini di terminal:
go run main.go --nama=Fardan --umur=25 --debug=trueOutput:
Nama: Fardan
Umur: 25
Debug mode: trueKalau kamu tidak memberikan nilai, maka akan dipakai default value yang ditentukan saat flag.String, [flag.Int](http://flag.Int), atau flag.Bool.
✅ Kenapa Harus Pakai flag?
Tanpa flag, kamu harus parsing argumen secara manual dari os.Args. Dengan flag, kamu bisa:
* Menentukan tipe data
* Menambahkan deskripsi yang muncul otomatis saat pakai --help
* Menghindari kesalahan parsing sendiri
Kesimpulan
Tiga package ini sangat penting dalam membuat aplikasi Go yang berbasis terminal:
| Package | Fungsi Utama |
|---|---|
errors | Membuat dan mengembalikan error |
os | Akses ke sistem operasi, argumen CLI, dan environment |
flag | Parsing argumen CLI dengan struktur yang jelas |
Dengan menguasai ketiganya, kamu sudah bisa mulai membuat aplikasi CLI yang interaktif dan lebih “siap produksi”.
Article Series
Golang Standard Library
Lanjutkan membaca seri ini untuk melihat perjalanan lengkapnya.
- 1Package fmt di Golang17 Apr 20253 min read
- 2Package errors, os, dan flag di Golang17 Apr 20253 min readCurrent article
- 3Package strings dan strconv di Golang19 Apr 20253 min read
- 4Mengenal Package io dan bufio di Golang23 Apr 20255 min read
- 5Package testing di Golang24 Apr 20252 min read