Banyak pemula Go yang mengira bahwa menulis:
import (
"pos/config"
)
berarti Go akan mengimpor semua file dan semua fungsi yang ada di dalam folder config.
Kelihatannya masuk akal, tetapi sebenarnya yang terjadi bukan seperti itu.
Go punya cara kerja yang unik dan sangat teratur dalam hal import dan paket.
Berikut penjelasan lengkapnya dengan bahasa sederhana.
Go Tidak Mengimpor “Folder”, Tapi 1 Package Utuh
Ketika kamu menulis:
import "pos/config"
Go tidak melihat isi folder satu per satu.
Go hanya melihat nama package di dalam file-file tersebut.
Contoh struktur:
pos/
└── config/
├── app.go
├── database.go
└── helper.go
Jika semua file tersebut punya deklarasi:
package config
maka Go menganggap mereka sebagai satu kesatuan package bernama config.
Jadi yang kamu import adalah:
1 package bernama
config(yang terdiri dari banyak file.go).
Semua File di Dalam Package Dikompilasi Bersama
Walaupun kamu tidak menggunakan semua isi package, Go tetap:
-
membaca semua file dalam folder
-
menggabungkannya sebagai satu unit (
package config) -
mengompilasikan semuanya
Namun itu bukan berarti semuanya bisa kamu akses.
Hanya Nama yang Diawali Huruf Besar yang Bisa Diakses
Go menggunakan konsep ekspor berdasarkan huruf besar/kecil:
| Nama Fungsi/Variabel | Bisa Diakses dari Luar? | Keterangan |
|---|---|---|
ConnectDB() |
✔ Ya | Diekspor (exported) |
InitConfig() |
✔ Ya | Diekspor |
privateHelper() |
❌ Tidak | Tidak diekspor |
dbURL |
❌ Tidak | Tidak diekspor |
Contoh:
config.ConnectDB() // Boleh
config.privateHelper() // Tidak boleh
Jadi meskipun fungsi privateHelper ada di dalam folder config, kamu tidak bisa memanggilnya dari luar package jika namanya diawali huruf kecil.
Import Bukan Berarti “Semua Hal Bisa Dipakai”
Ini perbedaan penting:
-
Package = seluruh isi folder (yang punya nama package sama)
-
API package = hanya yang huruf depannya kapital
Jadi meskipun seluruh file ikut dikompilasi, yang diekspor hanya yang “dibuka” oleh developer melalui huruf besar.
Contoh Mini untuk Memahaminya
Misalkan folder config/ punya isi seperti:
database.go
package config
func ConnectDB() {}
func connectInternal() {}
app.go
package config
func LoadEnv() {}
Jika kamu import:
import "pos/config"
maka kamu hanya bisa menggunakan:
config.ConnectDB()
config.LoadEnv()
Sedangkan ini error:
config.connectInternal() // ❌ tidak diekspor Kesimpulan
✔ import "pos/config" mengimpor 1 package bernama config
bukan “semua file” secara liar.
✔ Semua file dalam folder itu (yang punya package config) ikut dikompilasi
tetapi…
✔ Kamu hanya bisa mengakses fungsi/variabel/struct yang dimulai dengan huruf besar
karena itu yang diekspor.

0 Comments:
Posting Komentar