Apakah import "pos/config" Mengimpor Semua File di Dalam Folder? Begini Cara Kerjanya di Go

 

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