GoDasturchi
Use internal/ for Private Code

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.

papka-tuzilmasi.txt
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

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.

papka-tuzilmasi.txt
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