Dahili Paketler ve Çalışma Alanları
internal/, replace yönergeleri ve go work
Dahili Paketler ve Çalışma Alanları, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
internal/ Dizini
Bir internal/ dizininin içindeki paketler yalnızca üst dizin ağacındaki kod tarafından içe aktarılabilir. Bu, paket kapsüllemesini zorunlu kılar:
// Project structure:
// myapp/
// main.go
// internal/
// auth/auth.go <- can only be imported by myapp/
// db/db.go <- can only be imported by myapp/
// api/
// handlers.go <- can import myapp/internal/auth
// External package CANNOT do:
// import "myapp/internal/auth" <- compile errorinternal/ Paketlerini Kullanma
Aynı modülün içindeki kod ( internal/ dizininin üstünde bulunan kod), iç paketleri serbestçe içe aktarabilir:
// myapp/api/handlers.go
package api
import (
"myapp/internal/auth"
"myapp/internal/db"
)
func GetUser(id int) (*db.User, error) {
if !auth.IsValid() {
return nil, auth.ErrUnauthorized
}
return db.FindUser(id)
}internal/ Neden Kullanılır?
internal/ kuralının yararları:
- Diğer modüllerin uygulama ayrıntılarına bağımlı olmasını önler
- Harici çağıranları bozmadan yeniden düzenleme yapmanıza olanak tanır
- Bunun genel API'nin parçası olmadığını açıkça belirtir
- Standart Go araçları bu kısıtlamayı derleme zamanında uygular
Go Çalışma Alanları — go work
Go 1.18, replace yönergeleri olmadan birden fazla yerel modülle aynı anda çalışmak için çalışma alanlarını kullanıma sundu:
# Create a workspace in parent directory:
go work init ./myapp ./mylib
# Creates go.work:
# go 1.21
# use (
# ./myapp
# ./mylib
# )
# Now myapp can import mylib without replace directivesgo work sync
Çalışma alanı bağımlılıklarını go work sync ile eşitleyin:
# go.work file:
go 1.21
use (
./api
./worker
./shared
)
# Sync all module dependencies:
go work sync
# Build across all workspace modules:
go build ./...
# Test across all workspace modules:
go test ./...Çalışma Alanı ve replace Yönergesi Karşılaştırması
Yerel çok modüllü geliştirme için iki yaklaşımın karşılaştırması:
// BEFORE workspaces (cumbersome):
// go.mod in myapp:
// replace github.com/me/mylib => ../mylib
// Must remove before publishing!
// WITH workspaces (cleaner):
// go.work at root:
// use (./myapp ./mylib)
// go.mod files stay clean — go.work is gitignoredÇalışma Alanı Kullanım Senaryoları
Go çalışma alanlarını şu durumlarda kullanın:
- Bir kitaplığı ve onu kullanan uygulamayı aynı anda geliştirirken
- Birbirine başvuran birden fazla modül içeren tek depolu projelerde
- Yayımlamadan önce paylaşılan bir modüldeki değişiklikleri denerken
- Bir bağımlılığın çatallanmış sürümü üzerinde uygulamanızla birlikte çalışırken
go work add ve go work use
Çalışma alanı girdilerini go work alt komutlarıyla yönetin:
# Add a module to the workspace
go work use ./newservice
# Remove a module from workspace
go work use -r ./oldservice
# Edit go.work directly (opens $EDITOR):
go work edit
# go.work should usually be gitignored:
echo "go.work" >> .gitignore
echo "go.work.sum" >> .gitignoreInternal ve Çalışma Alanı Birlikte
Internal paketleri ve çalışma alanları tek depolu projelerde doğal biçimde birlikte kullanılabilir:
// Monorepo structure:
// services/
// go.work
// auth-service/
// internal/tokens/ <- private to auth-service
// order-service/
// internal/pricing/ <- private to order-service
// shared/
// models/ <- shared across services
// go.work:
// use (./auth-service ./order-service ./shared)Paket Düzenleme İçin En İyi Uygulamalar
Go projelerinin yerleşimi için öneriler:
- Küçük projelerde düz paket yapısı kullanın; gereğinden erken düzenlemeden kaçının
- Harici kullanıma yönelik olmayan uygulama ayrıntıları için
internal/kullanın - CLI main paketlerini
cmd/appname/altında bulundurun - Çok modüllü depolar için çalışma alanlarını kullanın, ancak
go.workdosyasını gitignore'a ekleyin - Derin iç içe geçirmeden kaçının; paketlerde en fazla 3-4 seviye kullanın
Kısa Kontrol
internal/ dizinindeki bir paketi kim içe aktarabilir?
Özet: Internal Paketleri ve Çalışma Alanları
Özet:
internal/, içe aktarmaları üst dizin ağacıyla sınırlar; bu kısıtlama derleyici tarafından uygulanır- Uygulama ayrıntılarını harici kullanıcılardan gizlemek için
internal/kullanın go work init, çok modüllü yerel geliştirme için çalışma alanı oluşturur- Çalışma alanları, yerel geliştirmede
replaceyönergelerinin yerini alır go.workvego.work.sumdosyalarını gitignore'a ekleyin
Yapay zeka eğitmeniyle Go öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“Dahili Paketler ve Çalışma Alanları” dersi ücretsiz mi?
Evet — “Dahili Paketler ve Çalışma Alanları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Dahili Paketler ve Çalışma Alanları” dersinde ne öğreneceğim?
internal/, replace yönergeleri ve go work Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Dahili Paketler ve Çalışma Alanları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Paketler: Go Kodunu Düzenleme
- go mod ile Go Modülleri
- Harici Bağımlılık Ekleme
- Dahili Paketler ve Çalışma Alanları