0Pricing
Go Academy · Pelajaran

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 error

Menggunakan 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 directives

go 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 gitignored

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

internal/ 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.work ke 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 init membuat ruang kerja untuk pengembangan lokal multi-modul
  • Ruang kerja menggantikan direktif replace untuk pengembangan lokal
  • Tambahkan go.work dan go.work.sum ke 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

  1. Paket: Menata Kode Go
  2. Modul Go dengan go mod
  3. Menambahkan Dependensi Eksternal
  4. Paket Internal dan Ruang Kerja
← Kembali ke Go Academy