Project Structure: Organizing Go Applications
Loyiha tuzilishi: Go dasturlarini tashkillashtirish
Loyiha kattalashgani sayin, barcha paketlarni modul ildizida yonma-yon saqlash tartibsizlikka olib keladi. Go hamjamiyatida keng qabul qilingan konventsiyalardan biri — `internal/` papkasi: bu maxsus papka nomi bo'lib, Go kompilyatori uni alohida tushunadi.
example.com/shop/
├── go.mod
├── main.go
└── internal/
└── store/
└── store.gointernal/ ichidagi har qanday paket faqat shu modul ichidan import qilinishi mumkin — boshqa tashqi modul uni hech qachon import qila olmaydi, buni Go kompilyatorining o'zi majburlaydi. Bu — Creating Packages darsidagi eksport/eksport qilinmagan qoidasining paket darajasidagi kattaroq ko'rinishi: internal/ni "bu paketlar bizning ichki tafsilotlarimiz, tashqarisiga ochiq API emas" deb belgilash usuli.
>_ Exercise
internal/store/store.go faylida items map[string]int maydoniga ega Store struct'ini yozing. NewStore() *Store konstruktorini, Add(name string, qty int) metodini (miqdorni qo'shadi) va Get(name string) int metodini (joriy miqdorni qaytaradi) yozing. main.goda moduldan foydalanib bir nechta mahsulot qo'shib, natijani chop eting.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
internal/ — Go kompilyatori tomonidan majburlanadigan maxsus papka: uning ichidagi paketlar faqat o'z moduli ichida import qilinishi mumkin. Bu loyihangizning ochiq API'si va ichki amalga oshirish tafsilotlari orasiga aniq chegara qo'yadi.
NEXT UP
Go Module Commands
$ go run main.go
Kodingizni ishga tushiring