Paket Internal dan Ruang Kerja
internal/, direktif replace, dan go work
Paket Internal dan Ruang Kerja adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Direktori internal/
Paket di dalam direktori internal/ hanya dapat diimpor oleh kode dalam pohon direktori induknya. Ini menerapkan enkapsulasi paket:
// 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 errorMenggunakan Paket internal/
Kode dalam modul yang sama (di atas direktori internal/) dapat dengan bebas mengimpor paket internal:
// 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)
}Mengapa Menggunakan internal/?
Manfaat konvensi internal/:
- Mencegah modul lain bergantung pada detail implementasi
- Memungkinkan Anda melakukan pemfaktoran ulang dengan bebas tanpa merusak pemanggil eksternal
- Memberikan tanda yang jelas: ini bukan bagian dari API publik
- Peralatan Go standar menerapkan pembatasan ini saat kompilasi
Ruang Kerja Go — go work
Go 1.18 memperkenalkan ruang kerja untuk mengerjakan beberapa modul lokal secara bersamaan tanpa direktif replace:
# 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
Sinkronkan dependensi ruang kerja dengan go work sync:
# 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 ./...Ruang Kerja vs Direktif replace
Perbandingan dua pendekatan untuk pengembangan lokal multi-modul:
// 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 gitignoredKasus Penggunaan Ruang Kerja
Kapan sebaiknya menggunakan ruang kerja Go:
- Mengembangkan pustaka dan penggunanya secara bersamaan
- Repositori tunggal dengan beberapa modul yang saling merujuk
- Menguji perubahan pada modul bersama sebelum menerbitkannya
- Mengerjakan percabangan dependensi bersamaan dengan aplikasi Anda
go work add dan go work use
Kelola entri ruang kerja dengan subperintah go work:
# 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/ dan Ruang Kerja secara Bersamaan
Paket internal dan ruang kerja berpadu secara alami dalam repositori tunggal:
// 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)Praktik Terbaik untuk Menata Paket
Rekomendasi tata letak proyek Go:
- Struktur paket datar untuk proyek kecil — hindari penataan terlalu dini
- Gunakan
internal/untuk detail implementasi yang tidak ditujukan bagi penggunaan eksternal - Letakkan paket main CLI di bawah
cmd/appname/ - Gunakan ruang kerja untuk repositori multi-modul, tetapi tambahkan
go.workke daftar yang diabaikan Git - Hindari penyarangan yang dalam — maksimal 3–4 tingkat paket
Pemeriksaan Singkat
Siapa yang dapat mengimpor paket dalam direktori internal/?
Ringkasan: Paket Internal dan Ruang Kerja
Ringkasan:
internal/membatasi impor pada pohon direktori induk — diterapkan oleh kompiler- Gunakan
internal/untuk menyembunyikan detail implementasi dari pengguna eksternal go work initmembuat ruang kerja untuk pengembangan lokal multi-modul- Ruang kerja menggantikan direktif
replaceuntuk pengembangan lokal - Tambahkan
go.workdango.work.sumke daftar yang diabaikan Git
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Paket Internal dan Ruang Kerja” gratis?
Ya — teks lengkap “Paket Internal dan Ruang Kerja” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Paket Internal dan Ruang Kerja”?
internal/, direktif replace, dan go work Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Paket Internal dan Ruang Kerja” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Paket: Menata Kode Go
- Modul Go dengan go mod
- Menambahkan Dependensi Eksternal
- Paket Internal dan Ruang Kerja