Use internal/ for Private Code
Maxfiy kod uchun internal/ dan foydalaning
Go kompilyatorining o'zi tushunadigan, ajoyib bir maxsus papka nomi bor: internal/. Bu papka ichidagi paketlarni faqat shu `internal/` ning ota-papkasi ichidan import qilish mumkin — boshqa hech qanday tashqi loyiha ularni import qila olmaydi.
myproject/
go.mod
internal/
database/ // faqat myproject ichidan import qilinishi mumkin
connection.go
pkg/
validator/ // istalgan tashqi loyiha import qila oladi
validator.go
main.go
// myproject/main.go ichida:
import "myproject/internal/database" // ✅ ishlaydi
// boshqa-loyiha/main.go ichida:
import "myproject/internal/database" // ❌ kompilyatsiya xatosi!Bu — Go'ning "eksport qilingan/qilinmagan" (katta/kichik harf) tamoyilining paket darajasidagi kengaytmasi: agar biror paketni "bu faqat bizning loyihamiz uchun, tashqi foydalanuvchilar uchun emas" demoqchi bo'lsangiz, uni internal/ ichiga joylashtirasiz — va Go kompilyatori buni majburiy ravishda ta'minlaydi, shunchaki hujjatdagi tavsiya emas.
O'zingizni sinab ko'ring
Savol: github.com/aziz/myapp/internal/cache paketini boshqa foydalanuvchi o'z loyihasida import "github.com/aziz/myapp/internal/cache" deb ishlatishga urinsa, nima bo'ladi?
Javob: Kompilyatsiya xatosi chiqadi — Go bunday importni butunlay rad etadi, chunki chaqiruvchi loyiha internal/ning ota-papkasi (myapp) ichida joylashmagan.
Key Takeaway
Key Takeaway:
internal/ papkasi — Go kompilyatori tomonidan majburiy ravishda ta'minlanadigan "faqat shu loyiha uchun" chegarasi; ochiq (public) kutubxona API'ingizni ichki detallardan himoya qilish uchun ishlatiladi.
NEXT UP
Keep main Small