Progress belajar
Modul 2 dari 73
0% 0/73 modul selesai
Setelah selesai, tandai modul ini agar progres kursus tetap rapi.
Progress disimpan lokal di browser ini.
Setup Go dan Developer Workflow
untuk Backend Skincare
Di modul ini kita menyiapkan Go 1.26 dan membangun kebiasaan kerja harian yang akan dipakai sepanjang proyek online shop skincare.
Workflow Pertama di Go
Dari instalasi sampai executable lokal
Kalau di Node.js kamu biasa mulai dari npm init, node index.js, lalu menumpuk script di package.json, di Go kamu akan mulai dari go mod init, go run, go test, go fmt, go vet, dan go build.
Tujuan modul ini bukan membuat aplikasi besar dulu. Tujuannya membuat kamu nyaman dengan alat kerja bawaan Go, karena hampir semua proyek Go yang sehat bersandar pada toolchain resmi, bukan tumpukan library tambahan sejak hari pertama.
Di modul sebelumnya kita menyamakan pola pikir. Sekarang kita memasang Go di mesinmu, lalu melatih lingkar kerja yang akan kamu ulang ratusan kali saat membangun katalog, cart, checkout, sampai worker.
Di ekosistem JS, banyak workflow disusun lewat script custom di package.json yang berbeda tiap tim. Di Go, perintah inti seperti go run, go test, go fmt, go vet, dan go build sudah menjadi kontrak bersama yang sama di semua proyek.
flowchart LR A["Install Go"] --> B["go version"] B --> C["go mod init"] C --> D["Tulis kode Go"] D --> E["go fmt ./..."] E --> F["go vet ./..."] F --> G["go test ./..."] G --> H["go run / go build"] H --> D
Gambar 1. Setelah setup sekali di kiri, kerja harianmu berputar di lingkar tulis kode → fmt → vet → test → jalankan, lalu kembali menulis kode.
Kumpulan alat resmi yang datang bersama instalasi Go dalam satu paket: compiler, standard library, formatter, test runner, static analyzer, dan command go sebagai pintu masuknya.
Ringkas
Satu instalasi Go sudah cukup untuk menjalankan, mengetes, memformat, menganalisis, dan membangun binary, tanpa memasang tool terpisah.
Konsisten
gofmt membuat gaya kode seragam di seluruh tim, jadi code review bisa fokus ke desain dan correctness, bukan spasi.
Siap produksi
go build menghasilkan executable untuk service API dan worker yang nanti mudah dikemas ke Docker dan dijalankan di AWS.
Install Go dan Verifikasi
Gunakan Go 1.26 untuk jalur ini
Untuk jalur Web Artisan, gunakan Go 1.26 agar go.mod, perintah, dan output kamu konsisten dengan materi dan environment tim.
Sumber resmi yang perlu kamu kenal: Download and install, Go 1.26 Release Notes, How to Write Go Code, Go Modules Reference, Managing Go installations, dan dokumentasi command di cmd/go.
macOS via Homebrew
Terminalbrew update brew install go go version
Windows via winget
PowerShellwinget install GoLang.Go go version
Ubuntu atau Debian via apt
Terminalsudo apt update sudo apt install golang-go go version
Repository distro kadang tertinggal beberapa rilis dari versi resmi. Kalau go version tidak menampilkan seri 1.26, pasang lewat installer atau tarball resmi dari go.dev/dl.
Linux manual via tarball resmi
Terminal# Unduh arsip Linux terbaru dari https://go.dev/dl/ sesuai CPU kamu. # Contoh nama file memakai placeholder 1.26.x, ganti dengan patch terbaru. curl -LO https://go.dev/dl/go1.26.x.linux-amd64.tar.gz sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf go1.26.x.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile source ~/.profile go version
Output yang kita harapkan mirip seperti ini. Angka patch dan arsitektur bisa berbeda sesuai mesinmu.
Terminalgo version go1.26.0 darwin/arm64
go terbacaJalankan go version. Kalau command tidak ditemukan, masalahnya hampir selalu PATH yang belum memuat folder binary Go.
Jalankan which go di macOS/Linux untuk melihat binary go yang sedang dipakai shell, berguna saat ada lebih dari satu instalasi.
Jalankan go env GOROOT GOPATH GOMODCACHE untuk melihat lokasi instalasi, folder kerja, dan cache module toolchain.
Terminalwhich go go env GOROOT GOPATH GOMODCACHE
Versi baru tanpa repot: GOTOOLCHAIN
Sejak Go 1.21, toolchain bisa menyesuaikan diri secara otomatis. Kalau go.mod sebuah proyek meminta go 1.26 sedangkan Go di mesinmu masih lebih lama, command go akan mengunduh dan memakai toolchain 1.26 untuk proyek itu, lalu menampilkan pesan bahwa ia berpindah versi.
Pengaturan yang menentukan toolchain mana yang dipakai. Nilai default auto membuat command go otomatis mengunduh toolchain lebih baru saat sebuah proyek memintanya lewat baris go di go.mod.
Terminalgo env GOTOOLCHAIN # auto # Ubah permanen bila perlu, misalnya untuk mengunci di lingkungan tertentu. go env -w GOTOOLCHAIN=auto
Di Node.js kamu sering memakai nvm atau .nvmrc agar versi runtime cocok per proyek. Go menyatukan ide itu ke dalam toolchain: baris go 1.26 di go.mod cukup untuk membuat command go memakai versi yang benar tanpa version manager terpisah.
Editor dan gopls
Bagian dari developer workflow adalah editor yang paham Go. Pasang ekstensi Go resmi (di VS Code) atau plugin Go untuk JetBrains, lalu biarkan ia memakai gopls, language server resmi Go. Dari sini kamu dapat autocomplete, go to definition, error inline sebelum compile, dan format otomatis saat menyimpan file.
Pengalaman editor yang kamu nikmati di TypeScript berasal dari language server-nya. Di Go, peran itu dipegang gopls, jadi fitur seperti autocomplete dan rename simbol terasa familier, hanya saja diperkuat compiler yang lebih strict.
Tulis versi Go yang dipakai di go.mod dan dokumentasikan cara install di README. Dengan begitu CI, laptop tiap developer, dan Docker image berangkat dari asumsi versi yang sama.
GOPATH vs Go Modules
Kenapa kamu tidak perlu membuat project di ~/go/src lagi
Dulu Go sangat bergantung pada GOPATH, sampai project wajib berada di ~/go/src. Sekarang workflow normal memakai Go Modules, jadi project boleh berada di folder kerja mana pun.
Di ekosistem Node.js, dependency biasanya turun ke node_modules di dalam project. Di Go modern, dependency dan versinya dikunci oleh go.mod, sementara source module yang diunduh disimpan di module cache global, biasanya ~/go/pkg/mod atau nilai dari GOMODCACHE.
flowchart TB
subgraph old["Dulu: era GOPATH"]
direction TB
G1["Semua project wajib di ~/go/src"]
G1 --> G2["Import dihitung dari posisi folder di GOPATH"]
G2 --> G3["Pindah folder bisa mematahkan import"]
end
subgraph new["Sekarang: era Go Modules"]
direction TB
M1["Project bebas di folder kerja mana pun"]
M1 --> M2["go.mod menetapkan module path dan versi dependency"]
M2 --> M3["Dependency diunduh ke cache global ~/go/pkg/mod"]
endGambar 2. Pergeseran dari “lokasi folder menentukan identitas” ke “go.mod menentukan identitas”. Inilah alasan tutorial lama yang menyuruhmu pindah ke ~/go/src sudah tidak relevan.
node_modulesatauvendor/sering berada di dalam project.package.jsonberisi identitas project dan dependency.package-lock.jsonataucomposer.lockmembantu reproduksi dependency.
go.modberada di root module dan menjadi prefix import path.- Dependency diunduh ke module cache global, bukan otomatis ke folder project.
go.summenyimpan checksum untuk memverifikasi dependency yang diunduh.
Folder default Go yang kini berperan sebagai tempat module cache (pkg/mod) dan binary tool (bin), bukan lagi tempat wajib menyimpan source code project modern.
Sistem dependency resmi Go yang membuat project punya go.mod, module path, versi dependency, dan aturan resolusi paket yang konsisten lintas mesin.
Terminalgo env GOPATH # /Users/kamu/go go env GOMODCACHE # /Users/kamu/go/pkg/mod
GOPATH belum benar-benar pensiun
Walau source project tidak lagi tinggal di GOPATH, folder itu masih dipakai untuk dua hal penting: cache module di pkg/mod dan binary CLI tool di bin. Saat nanti kamu memasang tool lewat go install, binarynya mendarat di $GOPATH/bin, jadi pastikan folder itu ada di PATH.
Terminal# Contoh memasang sebuah CLI tool Go (pola yang akan kamu pakai lagi nanti). go install example.com/some/tool@latest # Binary tool berada di sini, tambahkan ke PATH bila belum terbaca. echo "$(go env GOPATH)/bin"
Bayangkan ~/go/pkg/mod sebagai cache bersama lintas project, kira-kira seperti cache global npm atau pnpm store. Bedanya, project Go tetap dikendalikan oleh go.mod, bukan oleh isi cache global.
Jangan commit ~/go/pkg/mod, isi GOMODCACHE, atau build cache. Yang kamu commit adalah source code, go.mod, dan go.sum ketika sudah ada dependency eksternal.
go mod init dan Identitas Proyek
Nama module adalah alamat import jangka panjang
Perintah go mod init membuat file go.mod dan menetapkan module path sebagai prefix import untuk semua package di dalam project.
Untuk proyek kita, gunakan module path yang meniru alamat repository Git. Kamu belum harus push ke GitHub hari ini, tetapi memakai pola ini sejak awal membuat import internal rapi saat project membesar.
Terminalmkdir skincare-backend cd skincare-backend go mod init github.com/kamu/skincare-backend
Output umum:
Terminalgo: creating new go.mod: module github.com/kamu/skincare-backend
go.modmodule github.com/kamu/skincare-backend go 1.26
Baris go 1.26 bukan sekadar catatan. Ia menyatakan versi Go minimum untuk membangun module ini, dan lewat GOTOOLCHAIN tadi, ia ikut menentukan toolchain yang dipakai pada mesin yang versinya lebih lama.
String identitas module di baris pertama go.mod yang sekaligus menjadi prefix import. Package internal/product di module ini diimpor sebagai github.com/kamu/skincare-backend/internal/product.
Nama paket npm seperti lodash hanyalah label di registry. Module path Go justru menyatu dengan lokasinya: go get github.com/go-chi/chi/v5 benar-benar mengunduh dari alamat itu. Maka pilih module path sesuai tempat repository akan tinggal, bukan nama acak.
skincare-backend menjadi root module, mirip root project React atau Laravel.
go mod init github.com/kamu/skincare-backend menulis go.mod di root beserta baris versi go.
Commit go.mod agar identitas module tercatat di version control sejak commit pertama.
Mengganti module path di tengah jalan bisa mematahkan import di banyak file sekaligus. Tentukan nama sedekat mungkin dengan nama repository production agar tidak perlu diubah lagi.
go.mod dan go.sum
Mirip package.json + lockfile, tetapi tidak identik
go.mod menjelaskan module dan dependency yang dibutuhkan. go.sum mencatat checksum dependency agar setiap unduhan bisa diverifikasi keasliannya.
Kalau kamu datang dari Node.js, analogi cepatnya: go.mod terasa seperti package.json, sementara go.sum terasa seperti bagian integrity dari lockfile. Tapi hati-hati, go.sum bukan lockfile berisi seluruh pohon dependency seperti package-lock.json.
package.jsonmenyimpan metadata dan rentang versi dependency.- Lockfile menyimpan pohon dependency yang sangat detail dan rata.
- Folder
node_modulesbiasanya hidup di project lokal.
go.modmenyimpan module path, versi Go, dan requirement module.go.summenyimpan hash untuk memverifikasi modul yang pernah diperlukan.- Source dependency hidup di module cache global, bukan di project.
Reproduksi build di Go tidak datang dari satu lockfile raksasa, melainkan dari kombinasi go.mod (versi terpilih lewat algoritma minimal version selection) plus go.sum (jaminan isi modul tidak berubah). Hasilnya tetap deterministik, hanya jalannya berbeda.
go.modmodule github.com/kamu/skincare-backend go 1.26
Pada awal project tanpa dependency eksternal, go.sum belum tentu ada. File itu muncul saat kamu menambahkan module eksternal, misalnya nanti ketika memakai chi untuk router atau pgx untuk PostgreSQL.
Terminalgo mod tidy ls
Bagaimana dependency diselesaikan dan diverifikasi
Saat go build atau go mod tidy butuh sebuah dependency, alurnya kira-kira begini: baca daftar di go.mod, cek module cache, unduh bila belum ada, lalu cocokkan hash unduhan dengan go.sum sebelum dipakai.
flowchart TD
A["go build / go mod tidy"] --> B["Baca daftar dependency di go.mod"]
B --> C{"Ada di module cache?"}
C -->|Ya| E["Pakai dari ~/go/pkg/mod"]
C -->|Tidak| D["Unduh module dari module path"]
D --> F["Cocokkan hash dengan go.sum"]
F --> G{"Hash cocok?"}
G -->|Ya| E
G -->|Tidak| H["Berhenti: security error"]
E --> I["Kompilasi program"]Gambar 3. go.sum adalah gerbang keamanan: bila isi modul yang diunduh tidak cocok dengan hash yang tercatat, Go menolak melanjutkan build.
Tiap modul biasanya punya dua baris di go.sum: satu hash untuk isi pohon modul, satu lagi untuk file go.mod-nya. Untuk modul yang baru pertama kali kamu pakai, Go juga berkonsultasi ke checksum database publik agar yakin hash itu sama dengan yang dilihat seluruh dunia.
Log publik dan tahan-rusak berisi hash modul Go, secara default sum.golang.org (diatur lewat GOSUMDB). Go memakainya untuk memverifikasi modul baru sebelum mencatatnya ke go.sum. Modul privat bisa dikecualikan lewat GOPRIVATE.
go mod tidy menambah dependency yang benar-benar dipakai, menghapus yang tidak dipakai, lalu menyelaraskan go.mod dan go.sum agar bersih dan konsisten.
Kalau project sudah memiliki go.sum, commit file itu. Ia membuat tim dan CI memverifikasi dependency yang benar-benar sama, bukan sekadar versi yang mirip.
go run untuk Eksekusi Cepat
Mirip node index.js, tetapi tetap dikompilasi
go run memberi pengalaman secepat menjalankan node index.js, tetapi Go tetap mengompilasi program lebih dulu sebelum menjalankannya.
Buat file pertama di root project. Untuk sekarang kita pakai main.go sederhana agar fokus ke workflow, bukan arsitektur besar.
main.gopackage main import "fmt" func main() { fmt.Println("skincare-backend siap dipakai") }
Jalankan program:
Terminalgo run .
Output:
Terminalskincare-backend siap dipakai
Titik pada go run . berarti “package di folder ini”. Kamu juga bisa menyebut file langsung dengan go run main.go, tetapi go run . lebih disukai karena ikut menyertakan semua file di package yang sama.
Package khusus untuk program executable. Bila package bernama main memiliki fungsi main, Go bisa mengompilasinya menjadi binary yang dapat dijalankan.
node index.js menyerahkan file ke runtime Node untuk dieksekusi. go run . mengompilasi package main menjadi binary sementara, menjalankannya, lalu membuangnya. Tetap ada langkah compile, hanya tidak terlihat.
Selama eksplorasi awal, go run . cocok untuk memastikan program bisa dikompilasi dan output sesuai harapan tanpa menyimpan binary ke disk.
go build dan Binary
Output berupa executable, bukan script yang butuh runtime Node
go build menghasilkan executable dari package main. Untuk contoh murni Go, output ini bisa dijalankan langsung tanpa membawa folder dependency project.
Terminalgo build -o skincare-backend . ./skincare-backend
Output:
Terminalskincare-backend siap dipakai
Inilah beda inti go run dan go build. Keduanya sama-sama mengompilasi, tetapi go run membuang binarynya, sedangkan go build menaruh binary permanen di disk untuk kamu jalankan kapan saja.
flowchart TB
subgraph run["go run ."]
direction LR
R1["Source .go"] --> R2["Kompilasi"]
R2 --> R3["Binary sementara di cache"]
R3 --> R4["Jalankan lalu dibuang"]
end
subgraph build["go build -o skincare-backend ."]
direction LR
B1["Source .go"] --> B2["Kompilasi"]
B2 --> B3["Binary permanen di disk"]
B3 --> B4["Kamu jalankan kapan saja"]
endGambar 4. go run untuk loop development yang cepat, go build untuk menghasilkan artifact yang dikirim ke server atau dikemas ke container.
Tanpa -o, go build . di root module menamai binary sesuai elemen terakhir module path, jadi github.com/kamu/skincare-backend menghasilkan file skincare-backend. Memakai -o membuat nama output eksplisit dan tidak bergantung tebakan.
- Kode dijalankan oleh runtime Node di server.
- Deploy membawa source,
package.json, lockfile, dan dependency production. - Build frontend menghasilkan asset, tetapi backend Node tetap butuh runtime.
- Service dikompilasi menjadi executable untuk target OS dan arsitektur.
- Deploy bisa membawa binary dan konfigurasi runtime saja.
- Di Docker, binary Go sering membuat image jauh lebih ramping.
Preview cross compile
Nanti saat masuk Docker dan AWS, kamu akan lebih sering membangun binary untuk Linux. Go bisa melakukannya dari mesin apa pun cukup dengan menyetel GOOS dan GOARCH, tanpa memasang toolchain khusus per target.
TerminalGOOS=linux GOARCH=amd64 go build -o skincare-backend-linux . # Lihat semua target yang didukung toolchain saat ini. go tool dist list
Binary mandiri bukan berarti semua masalah deploy hilang. Aplikasi tetap butuh environment variable, koneksi database, strategi migration, dan observability.
go test, go fmt, dan go vet
Tiga kebiasaan kecil yang menjaga kualitas sejak awal
Go membawa testing, formatting, dan static analysis dasar di toolchain resmi, jadi standar kualitas minimum tidak bergantung pada selera tiap project.
go test
Menjalankan test bawaan Go dari file *_test.go, tanpa Jest, PHPUnit, atau library test tambahan.
go fmt
Memformat source dengan gaya standar Go. Tidak ada lagi debat tabs vs spaces di code review.
go vet
Mencari pola yang sangat mungkin salah, misalnya format Printf yang tidak cocok dengan argumennya.
Buat fungsi kecil agar kita punya sesuatu untuk dites. File ini sudah mulai terasa seperti domain online shop skincare, walau masih sangat sederhana.
price.gopackage main // DiscountedPrice mengurangi harga produk dengan nominal diskon, dalam rupiah. func DiscountedPrice(price, discount int64) int64 { return price - discount }
price_test.gopackage main import "testing" func TestDiscountedPrice(t *testing.T) { got := DiscountedPrice(120000, 20000) want := int64(100000) if got != want { t.Fatalf("got %d, want %d", got, want) } }
Jalankan format, vet, lalu test:
Terminalgo fmt ./... go vet ./... go test ./...
Sebelum menjalankan test, go test otomatis menjalankan sebagian pemeriksaan go vet berkepercayaan tinggi. Kamu bisa mematikannya dengan go test -vet=off, tetapi biasanya tidak perlu.
Di Jest kamu mengatur lokasi test lewat konfigurasi dan convention. Di Go, convention-nya pasti: file *_test.go di package yang sama dan fungsi berawalan TestXxx dengan parameter *testing.T.
go fmt ./... menjalankan gofmt pada semua package. Lebih enak lagi, atur editor agar format on save lewat gopls, sehingga kamu hampir tidak pernah menjalankannya manual.
go vet fokus pada masalah berkepercayaan tinggi. Untuk aturan style tambahan, nanti kita bisa menambah golangci-lint, tetapi bukan di modul fondasi ini.
Struktur Folder Minimal
Cukup kecil untuk belajar, cukup rapi untuk tumbuh
Di awal, jangan membuat folder terlalu banyak. Namun kita tetap menyiapkan struktur yang tidak akan terasa berantakan saat masuk API, database, dan domain skincare.
- skincare-backend/
- go.mod
- go.sum muncul setelah ada dependency eksternal
- main.go program pertama untuk latihan workflow
- price.go contoh fungsi domain kecil
- price_test.go contoh unit test bawaan Go
- internal/
- product/
- model.go nanti untuk domain katalog produk skincare
- README.md
Convention sekaligus aturan compiler Go: package di bawah internal/ hanya boleh diimpor oleh kode yang berakar di folder induk internal/ itu. Cocok untuk detail aplikasi yang tidak ingin dipakai project lain.
Laravel memberi struktur besar sejak awal lewat app/Http, app/Models, dan seterusnya. Go lebih minimal, jadi kita menambah folder saat kebutuhan desainnya nyata, bukan karena framework memaksa.
Contoh file model awal
internal/product/model.gopackage product type Product struct { ID int64 Name string PriceRupiah int64 }
Untuk modul ini, internal/product/model.go belum dipakai dari main.go. Ia hanya memperlihatkan arah struktur. Perhatikan PriceRupiah bertipe int64, melanjutkan kebiasaan dari modul sebelumnya untuk tidak memakai floating point pada uang.
Jangan langsung membuat folder handler, service, repository, config, dan platform kalau belum ada kode yang membutuhkannya. Struktur yang baik lahir dari kebutuhan, bukan dari template kosong.
Hands-on Workflow Harian
Simulasi dari folder kosong sampai binary jalan
Bagian ini bisa kamu ikuti dari terminal kosong. Anggap ini ritual pembuka sebelum kita membangun API skincare yang sebenarnya.
Mulai dari folder baru bernama skincare-backend.
Gunakan module path yang akan menjadi alamat repository.
Buat main.go, lalu price.go dan price_test.go agar go test punya sesuatu untuk dijalankan.
Jalankan go fmt, go vet, go test, go run, lalu go build.
Terminalmkdir skincare-backend cd skincare-backend go mod init github.com/kamu/skincare-backend cat > main.go <<'EOF' package main import "fmt" func main() { fmt.Println("skincare-backend siap dipakai") } EOF cat > price.go <<'EOF' package main func DiscountedPrice(price, discount int64) int64 { return price - discount } EOF cat > price_test.go <<'EOF' package main import "testing" func TestDiscountedPrice(t *testing.T) { if got := DiscountedPrice(120000, 20000); got != 100000 { t.Fatalf("got %d, want %d", got, 100000) } } EOF go fmt ./... go vet ./... go test ./... go run . go build -o skincare-backend . ./skincare-backend
Setelah itu, cek isi folder:
Terminalls -la
Hasil minimum yang masuk akal:
Outputgo.mod main.go price.go price_test.go skincare-backend
Urutan fmt, vet, test, lalu run atau build akan tetap relevan saat project sudah punya chi, pgx, Docker, CI, dan deploy AWS. Hanya skalanya yang membesar.
Jebakan Umum Developer JS/PHP
Hal kecil yang sering membuat setup Go terasa aneh di awal
Sebagian kebingungan awal bukan karena Go sulit, tetapi karena mental model dari Node.js, TypeScript, atau Laravel tidak selalu cocok.
Jebakan yang Perlu Dihindari
- Mencari
node_modulesdi project. Dependency Go masuk ke module cache global, bukan folder project. - Membuat project di
~/go/srckarena tutorial lama. Dengan Go Modules, project bisa berada di folder kerja mana pun. - Lupa menaruh
$GOPATH/bindi PATH. Tool hasilgo installada di sana, kalau PATH belum memuatnya, command tool tidak akan terbaca. - Menganggap
go runseperti interpreter.go runtetap compile lebih dulu, lalu menjalankan binary sementara. - Menghapus
go.sumdari repository. Kalau file itu sudah muncul, commit untuk menjaga verifikasi dependency. - Menunda
go fmtsampai akhir. Format sejak awal agar diff kecil dan review bersih. - Menganggap
go vetsama dengan linter lengkap.go vetpenting, tetapi hanya satu lapisan static analysis. - Mengganti module path sembarangan. Module path memengaruhi semua import, jadi pilih dengan niat jangka panjang.
Kalau TypeScript strict mode membantumu menangkap masalah sebelum runtime, Go membawa ide itu lebih jauh lewat compiler, test runner, formatter, dan vet yang sudah tersedia langsung dari toolchain.
Banyak artikel lama masih meminta kamu menaruh project di GOPATH/src. Untuk jalur ini, gunakan Go Modules dan selalu mulai dari go mod init.
Ringkasan & Poin Penting
Sekarang kamu sudah punya environment Go dan workflow dasar yang akan menjadi pondasi semua modul berikutnya.
Yang Wajib Menempel
- Gunakan Go 1.26 dan deklarasikan
go 1.26digo.mod. Lewat GOTOOLCHAIN, baris itu cukup untuk menyamakan versi toolchain antar mesin. go mod init github.com/kamu/skincare-backendmenetapkan module path yang sekaligus menjadi prefix import dan alamat unduhan.GOPATHkini berperan untuk module cache dan binary tool, sementara source project modern memakai Go Modules.go.modadalah pusat metadata dependency, sedangkango.summenyimpan checksum yang menolak build bila isi modul berubah.go run .cepat untuk feedback,go buildmenghasilkan binary permanen yang nanti masuk ke Docker dan AWS.go fmt ./...,go vet ./..., dango test ./...adalah ritual kualitas minimum sebelum commit, dango testsudah ikut menjalankan vet.- Struktur awal cukup sederhana:
go.mod,main.go, test kecil, daninternal/untuk kode aplikasi yang tidak diekspor keluar module.
Pemetaan ke proyek online shop skincare
API layer
Binary dari go build nanti menjadi service HTTP untuk katalog produk, cart, checkout, order, dan auth.
Worker layer
Workflow yang sama dipakai untuk worker seperti sinkronisasi stok, email order, dan proses pembayaran async.
Langkah berikutnya
Di modul berikutnya kita masuk ke fondasi tipe data Go: deklarasi dengan var dan :=, const, tipe dasar seperti string, int, bool, dan float, lalu zero value, konversi tipe, dan custom type. Dari sana kamu mulai memodelkan harga, kuantitas, status, dan nama produk skincare dengan aman.
Pastikan go version, go run ., go test ./..., go fmt ./..., go vet ./..., dan go build -o skincare-backend . berhasil di laptopmu.
Progress disimpan lokal di browser ini.