Go Academy · Ders

Dahili Paketler ve Çalışma Alanları

internal/, replace yönergeleri ve go work

4. ders / 412 adım

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 error

internal/ 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 directives

go 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" >> .gitignore

Internal 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.work dosyası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 replace yönergelerinin yerini alır
  • go.work ve go.work.sum dosyalarını gitignore'a ekleyin
Başlamak ücretsiz

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

  1. Paketler: Go Kodunu Düzenleme
  2. go mod ile Go Modülleri
  3. Harici Bağımlılık Ekleme
  4. Dahili Paketler ve Çalışma Alanları
← Go Academy Sayfasına Dön