Paket: Menata Kode Go
Deklarasi paket, import, dan nama yang diekspor
Paket: Menata Kode Go adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Apa Itu Paket?
Setiap berkas sumber Go termasuk dalam sebuah paket. Nama paket muncul di bagian atas setiap berkas. Paket mengelompokkan kode yang berkaitan dan mengatur visibilitas:
// file: math/calc.go
package math
// Exported — accessible from other packages (capital letter)
func Add(a, b int) int { return a + b }
// Unexported — package-private (lowercase)
func helper() int { return 42 }Deklarasi Paket dan Jalur Impor
Nama paket (singkat) berbeda dari jalur impor (jalur modul/direktori lengkap):
// Import path: github.com/myapp/util/stringutil
// Package name: stringutil (last segment by convention)
package stringutil
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}Mengimpor Paket
Gunakan import untuk memasukkan paket lain. Go mengharuskan semua impor digunakan:
package main
import (
"fmt" // standard library
"strings" // standard library
"github.com/myapp/util/math" // third-party or local
)
func main() {
fmt.Println(strings.ToUpper("hello"))
fmt.Println(math.Add(1, 2))
}Pengenal yang Diekspor vs Tidak Diekspor
Pengenal yang diawali huruf kapital adalah diekspor (publik). Pengenal dengan huruf kecil tidak diekspor (khusus paket):
package server
// Exported: accessible from other packages
type Server struct {
Addr string // exported field
timeout int // unexported field
}
// Exported method
func (s *Server) Start() error { return nil }
// Unexported helper
func (s *Server) listen() {}Paket main dan Fungsi main
Paket main bersifat khusus — paket ini mendefinisikan program yang dapat dieksekusi. Fungsi main adalah titik masuknya:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
// Program starts here and ends here
}
// All other packages are libraries — no main() neededFungsi init()
Setiap paket dapat memiliki satu atau beberapa fungsi init() yang berjalan sebelum main(), secara otomatis dan sesuai urutan deklarasi:
package config
import "fmt"
var DB string
func init() {
DB = "localhost:5432/mydb"
fmt.Println("config package initialized")
}
// init runs once when the package is first imported
// Multiple init() functions per file/package are allowedImpor Kosong untuk Efek Samping
Impor sebuah paket hanya untuk efek samping init()-nya dengan menggunakan pengenal kosong:
package main
import (
"database/sql"
_ "github.com/lib/pq" // registers PostgreSQL driver via init()
)
func main() {
db, err := sql.Open("postgres", "host=localhost dbname=test")
_ = db
_ = err
}Impor dengan Alias
Ganti nama paket saat mengimpor untuk menghindari benturan nama atau agar lebih ringkas:
package main
import (
"fmt"
gomath "math" // alias to avoid collision
mymath "github.com/me/math"
)
func main() {
fmt.Println(gomath.Sqrt(16)) // 4
fmt.Println(mymath.Add(1, 2)) // 3
}Konvensi Penamaan Paket
Konvensi penamaan paket Go:
- Satu kata, singkat, dan menggunakan huruf kecil:
http,json,fmt - Sesuaikan dengan nama direktori:
util/stringutil/→ paketstringutil - Jangan gunakan garis bawah atau camelCase dalam nama paket
- Hindari nama generik seperti
util,common,helper - Nama paket merupakan bagian dari pengenal: lebih baik gunakan
http.Clientdaripadahttplib.HTTPClient
Impor Melingkar
Go TIDAK mengizinkan impor melingkar. Paket A tidak dapat mengimpor B jika B mengimpor A. Atasi dengan mengekstrak kode bersama ke paket ketiga:
// WRONG: A imports B, B imports A — compile error
// package a imports "myapp/b"
// package b imports "myapp/a"
// SOLUTION: extract shared types to package c
// package a imports "myapp/c"
// package b imports "myapp/c"
// No circular dependencyPemeriksaan Singkat
Apa yang membuat sebuah pengenal diekspor dalam Go?
Ringkasan: Paket
Konsep utama paket:
- Setiap berkas diawali dengan
package name - Huruf kapital = diekspor (publik), huruf kecil = tidak diekspor (khusus paket)
- Impor menggunakan jalur lengkap, gunakan nama paket singkat
init()berjalan otomatis sebelummain()- Impor kosong
_ "pkg"hanya untuk efek samping - Impor melingkar tidak diizinkan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Paket: Menata Kode Go” gratis?
Ya — teks lengkap “Paket: Menata Kode Go” 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: Menata Kode Go”?
Deklarasi paket, import, dan nama yang diekspor 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 1 dari 4.
Berapa lama pelajaran “Paket: Menata Kode Go” 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