Package, Import, dan Access Modifier di Golang

Halo teman-teman developer π
Hari ini kita akan bahas salah satu fondasi penting dalam bahasa Go: package, import, dan access modifier. Ini adalah konsep dasar yang *wajib banget* kamu kuasai sebelum masuk ke hal-hal yang lebih kompleks seperti concurrency atau microservices.
Langsung aja, kita bahas satu per satu, pelan-pelan tapi pasti.
1. Apa Itu Package di Golang?
Di Go, package itu seperti folder atau modul. Fungsinya untuk mengelompokkan kode agar rapi dan reusable.
* Semua file Go harus deklarasi package di baris paling atas.
* File yang termasuk dalam satu package akan bisa saling akses fungsi atau struct di dalamnya (selama aturan access modifier terpenuhi).
Contoh:
// file: mathutil/math.go
package mathutil
func Add(a, b int) int {
return a + b
}// file: main.go
package main
import (
"fmt"
"golang-basic/mathutil"
)
func main() {
result := mathutil.Add(2, 3)
fmt.Println("Hasil:", result)
}> Catatan: Struktur folder sangat penting. Go sangat bergantung pada struktur direktori yang sesuai dengan package-nya.
2. Cara Menggunakan Import
Keyword import digunakan untuk memakai kode dari package lain.
Ada dua jenis import:
a. Import dari Standard Library
import "fmt"b. Import dari Package Sendiri atau Pihak Ketiga
import "golang-basic/utils"
import "github.com/gin-gonic/gin"Tips:
* Kamu bisa kasih alias import kalau namanya panjang.
import u "golang-basic/utils"* Kalau kamu import tapi tidak digunakan, akan error.
// Ini akan error
import "fmt"* Kalau ingin import tapi tidak dipakai langsung (misalnya hanya untuk init function), pakai _
import _ "github.com/lib/pq"3. Access Modifier di Golang
Ini penting banget! Di Go, tidak ada keyword public, private, atau protected seperti di bahasa lain.
Penentu visibility cuma satu: huruf kapital.
| Nama Function/Variable | Bisa Diakses dari Package Lain? |
|---|---|
Add() | β Yes (Public) |
subtract() | β No (Private) |
Contoh:
// file: pricing/pricing.go
package pricing
// calculateDiscount adalah fungsi private yang tidak boleh diakses dari luar package
func calculateDiscount(basePrice float64) float64 {
if basePrice >= 1_000_000 {
return basePrice * 0.2 // diskon 20%
} else if basePrice >= 500_000 {
return basePrice * 0.1 // diskon 10%
}
return 0
}
// CalculateFinalPrice adalah fungsi public yang digunakan dari luar package
func CalculateFinalPrice(basePrice float64) float64 {
discount := calculateDiscount(basePrice)
return basePrice - discount
}// file: main.go
package main
import (
"fmt"
"golang-basic/pricing"
)
func main() {
price := 1200000.0
final := pricing.CalculateFinalPrice(price)
fmt.Printf("Harga awal: Rp%.0f\n", price)
fmt.Printf("Harga setelah diskon: Rp%.0f\n", final)
// fmt.Println(pricing.calculateDiscount(price)) // β ERROR: cannot refer to unexported name
}π Output:
Harga awal: Rp1200000
Harga setelah diskon: Rp960000π‘ Penjelasan Real-World:
* calculateDiscount sengaja dibuat private karena kita nggak mau orang luar package manggil langsung.
* Fungsi itu bisa berubah logika internalnya kapan aja (misal diskon berdasarkan musim, event, dsb).
* Dengan membungkus akses melalui CalculateFinalPrice, kita menjaga abstraksi dan konsistensi bisnis logic.
Penutup
Untuk merangkum:
* Gunakan package untuk mengorganisir kode.
* Gunakan import untuk memakai kode dari package lain.
* Huruf kapital di awal nama menentukan apakah fungsi/variabel bisa diakses dari luar.
Ini adalah pondasi dari *code organization* di Golang. Kalau kamu ngerti ini, kamu udah siap buat ngelangkah ke design pattern, dependency injection, atau bahkan bikin REST API pake Go.
Kalau kamu masih bingung, jangan ragu buat tanya ya. Kita di sini buat belajar bareng-bareng. Happy coding
Article Series
Golang Basic
Lanjutkan membaca seri ini untuk melihat perjalanan lengkapnya.
- 1Panduan Instalasi Golang di WSL 2 Ubuntu21 Mar 20252 min read
- 2Menginisiasi Project Golang23 Mar 20252 min read
- 3Memulai Program dengan Hello World23 Mar 20252 min read
- 4Tipe Data String, Boolean, dan Number di Golang26 Mar 20253 min read
- 5Tipe Data Array, Slice, dan Map di Golang27 Mar 20252 min read
- 6Panduan Lengkap If-Else dan Switch dalam Golang27 Mar 20253 min read
- 7Function di Golang30 Mar 20253 min read
- 8Panic, defer dan recovery di Golang10 Apr 20253 min read
- 9Struct dan Struct Method di Golang10 Apr 20252 min read
- 10Interface dan Interface Kosong di Golang10 Apr 20253 min read
- 11Pointer di Golang14 Apr 20253 min read
- 12π§ Latihan Pointer di Golang14 Apr 20252 min read
- 13Package, Import, dan Access Modifier di Golang16 Apr 20253 min readCurrent article