Web Artisan
Beranda

Progress belajar

Modul 1 dari 73

0% 0/73 modul selesai

Setelah selesai, tandai modul ini agar progres kursus tetap rapi.

Progress disimpan lokal di browser ini.

Roadmap 1 · Fondasi

Pengenalan Go
untuk Backend Developer

Di modul pertama ini kita menyamakan pola pikir: Go dipakai bukan karena Node.js atau PHP buruk, tetapi karena trade-off Go sangat cocok untuk backend yang ingin sederhana, cepat, eksplisit, dan mudah dioperasikan.

Bahasa: Go 1.26~60 menit bacaProyek: Online Shop Skincare
01

Kenapa Modul Ini Penting

Sebelum menulis endpoint, repository, worker, atau Dockerfile, kamu perlu tahu kenapa Go membentuk cara berpikir backend yang berbeda dari JavaScript dan PHP.

Kalau kamu datang dari React dan TypeScript, kamu sudah terbiasa memikirkan bentuk data, state, API contract, dan runtime JavaScript yang fleksibel. Kalau kamu pernah menyentuh Laravel, kamu mungkin juga terbiasa dengan framework yang sangat produktif, banyak konvensi, dan banyak fitur siap pakai.

Go mengambil jalur lain. Ia tidak mencoba menjadi framework besar. Ia memberi bahasa, standard library yang kuat, toolchain rapi, concurrency bawaan, dan gaya desain yang sengaja dibuat sederhana.

Modul ini sengaja belum menumpahkan sintaks. Kita tidak akan menghafal for, if, atau cara deklarasi variabel di sini, karena kamu sudah developer berpengalaman. Yang kita bangun dulu adalah model mental: kenapa Go terasa seperti ini, dan kenapa cara berpikirnya cocok untuk backend yang harus hidup lama di produksi.

🌉Bridge utama: dari TypeScript ke Go

Kamu sudah nyaman dengan TypeScript yang statically typed. Go lebih strict lagi, tidak ada any sebagai jalan pintas, tidak ada tipe yang menghilang saat runtime, dan compiler ikut menjaga kontrak sebelum aplikasi dijalankan.

Dalam proyek online shop skincare, pilihan bahasa backend bukan sekadar selera. Kita akan membangun katalog produk, keranjang, checkout, inventory, payment callback, background job, email, audit log, dan deploy ke AWS. Bagian-bagian itu butuh kode yang jelas, mudah dites, mudah dibaca ulang, dan tidak terlalu ajaib.

Target Modul

  • Memahami Go sebagai bahasa compiled, statically typed, dan opinionated.
  • Membandingkan Go dengan Node.js, TypeScript, PHP, dan Laravel secara adil.
  • Melihat posisi Go API dan Go Worker di stack backend online shop skincare.
  • Menjalankan program Go kecil supaya konsep tidak berhenti di teori.
02

Apa Itu Go

Go adalah bahasa pemrograman compiled, statically typed, garbage-collected, dengan concurrency built-in dan toolchain yang sengaja dibuat sederhana.

Situs resmi go.dev meringkas posisi Go dalam satu kalimat: “Build simple, secure, scalable systems with Go”. Go didukung Google, open-source, mudah dipelajari oleh tim, punya concurrency bawaan, dan standard library yang kuat. Untuk jalur Go Artisan ini, kita memakai Go seri 1.26 sesuai target proyek.

📌Soal versi

Go rilis seri mayor baru kira-kira tiap enam bulan (Februari dan Agustus). Seri 1.26 rilis Februari 2026. Di file go.mod nanti kita menulis baris go 1.26 untuk menyatakan versi minimum yang dipakai modul.

compiled

Kode Go dikompilasi menjadi binary executable sebelum dijalankan, sehingga hasil build bisa dikirim sebagai satu file aplikasi ke server atau container.

statically typed

Tipe data diperiksa saat compile time, bukan baru ketahuan saat request produksi masuk ke endpoint.

opinionated

Go punya preferensi kuat soal gaya kode, struktur sederhana, formatting otomatis, dependency management, dan error handling eksplisit.

Ada tiga hal yang akan terasa cepat bagi developer JavaScript dan PHP.

Bahasanya kecil

Jumlah konsep inti tidak banyak, jadi kamu lebih cepat masuk ke desain backend dibanding menghafal fitur bahasa.

Tooling bawaan

go fmt, go test, go mod, dan go run adalah bagian dari pengalaman standar, bukan pilihan plugin terpisah.

Runtime efisien

Go punya garbage collector dan goroutine, tetapi tetap menghasilkan binary yang praktis untuk service backend.

🌉Bridge: dari kelelahan memilih di JS ke permukaan kecil Go

Di ekosistem JavaScript kamu sering memilih dulu: bundler, test runner, linter, formatter, gaya import, dan banyak konvensi tim. Go memangkas pilihan itu dengan menyediakan satu cara standar untuk format, test, dan build, sehingga energi pindah dari konfigurasi ke desain backend.

📌Catatan

Go bukan bahasa tanpa runtime sama sekali. Binary Go tetap membawa runtime untuk garbage collector, scheduler goroutine, map, panic, reflection, dan fitur lain yang dibutuhkan program.

Kita tidak memilih Go karena ingin terlihat lebih low-level. Kita memilih Go karena ia memberi cukup kontrol untuk backend serius, tanpa membuat proses development terasa seberat bahasa sistem tradisional.

03

Kenapa Go Populer untuk Backend

Go populer di backend karena kombinasi simplicity, performance, concurrency bawaan, compile cepat, dan deployment yang sederhana.

Backend modern sering berisi banyak pekerjaan kecil yang harus stabil: menerima HTTP request, validasi input, bicara ke database, memanggil payment gateway, menulis log, menjalankan worker, dan memantau health check. Go cocok untuk pekerjaan seperti ini karena desain bahasanya mendorong jalur yang eksplisit.

Simplicity

Go mengurangi pilihan gaya yang terlalu banyak. Hasilnya, kode antar tim cenderung lebih mirip dan mudah dibaca.

Performance

Binary Go berjalan efisien untuk HTTP server, worker, CLI, dan tooling infrastruktur tanpa perlu banyak tuning di awal.

Concurrency built-in

Goroutine dan channel adalah fitur bahasa, bukan library tambahan. Ini berguna untuk worker, fan-out task, timeout, dan pipeline data.

Fast compile

Go dirancang agar compile terasa cepat, sehingga loop menulis kode, menjalankan test, lalu memperbaiki bug tetap nyaman.

Supaya tidak abstrak, berikut perbandingan langsung tiga pilihan yang mungkin pernah kamu pakai, dilihat dari sudut backend service.

DimensiNode.js + TypeScriptPHP + LaravelGo
Sistem tipeTS di atas JS, hilang saat runtimeDinamis, tipe opsional lewat anotasiStatis, bagian inti bahasa, dicek compiler
Bawaan ke serverSource, node_modules, dan runtime NodeSource, runtime PHP, dan ekstensiSatu binary mandiri
ConcurrencyEvent loop satu thread, async dan awaitUmumnya per request, antar prosesGoroutine dan channel bawaan
Startup prosesCepat, perlu Node terpasangCepat lewat PHP-FPM dan web serverSangat cepat, cukup jalankan binary
Gaya kerjaBanyak pilihan dan konfigurasiBanyak konvensi dan magic frameworkSedikit cara, eksplisit, satu formatter

Tabel 1. Bukan soal mana yang terbaik mutlak, tetapi soal trade-off mana yang paling cocok untuk service backend yang harus dioperasikan jangka panjang.

Kenapa bukan Node.js?

Node.js sangat bagus untuk tim yang sudah kuat JavaScript end-to-end, butuh ekosistem npm besar, atau ingin satu bahasa dari frontend sampai backend. Tetapi untuk service backend jangka panjang, Go memberi binary deployment yang lebih sederhana, tipe yang selalu ada saat compile, dan concurrency model yang tidak bergantung pada event loop JavaScript.

Kenapa bukan PHP atau Laravel?

Laravel sangat produktif untuk aplikasi web monolitik, admin panel, dan tim yang ingin fitur framework siap pakai. Tetapi Go lebih menarik saat kita ingin service kecil, worker, CLI, dan proses deployment yang dekat dengan container dan cloud-native tooling.

💡Kenapa ini penting untuk online shop

Online shop skincare bukan hanya CRUD produk. Ada checkout, reservation inventory, callback payment, email, notifikasi, sinkronisasi stok, dan background job yang akan lebih mudah dikelola bila kode backend eksplisit dan mudah dites.

⚠️Jangan salah framing

Go bukan pengganti universal untuk Node.js atau Laravel. Pilih Go saat kamu menghargai binary deployment, strict typing, concurrency eksplisit, dan kode backend yang minim magic.

04

Compiled vs Interpreted

Perbedaan compiled dan interpreted paling terasa di cara aplikasi dijalankan, cara error ditemukan, dan cara kita mengirim aplikasi ke server.

Di Node.js, file JavaScript biasanya dibaca dan dieksekusi oleh runtime Node.js. Di Go, file .go dikompilasi lebih dulu menjadi executable. Kamu tetap bisa memakai go run saat development, tetapi di balik layar Go tetap melakukan proses compile sebelum menjalankan program.

flowchart TB
  subgraph node["Cara interpreted (Node.js)"]
    direction LR
    A1["main.js + node_modules"] --> A2["Node.js runtime di server"] --> A3["program berjalan"]
  end
  subgraph gobuild["Cara compiled (Go)"]
    direction LR
    B1["main.go"] --> B2["go build"] --> B3["binary mandiri"] --> B4["program berjalan"]
  end

Gambar 1. Node membawa source, dependency, dan runtime ke server. Go memadatkan semuanya menjadi satu binary saat build, lalu server cukup menjalankan binary itu.

Node.js: runtime menjalankan source
  • Server butuh Node.js runtime.
  • Error tertentu baru muncul saat jalur kode dieksekusi.
  • Deployment biasanya membawa source, dependency, dan runtime.
Go: compiler membuat binary
  • Server menjalankan hasil build berupa binary.
  • Banyak kesalahan tipe dan import berhenti di compile time.
  • Deployment container bisa sederhana karena binary sudah membawa aplikasi.

Contoh paling kecil.

cmd/hello/main.go
package main import "fmt" func main() { fmt.Println("Go Artisan: backend online shop skincare") }

Jalankan dengan mode development.

Terminal
go run ./cmd/hello

Build menjadi binary.

Terminal
go build -o bin/skincare ./cmd/hello ./bin/skincare
🧰Analogi

go run mirip pesan makanan yang langsung dimasak dan dimakan. go build mirip menyiapkan paket makanan rapi yang bisa dikirim ke tempat lain dan dibuka tanpa membawa dapur lengkap.

Untuk backend production, pola go build sangat nyaman. Kita bisa build binary di CI, bungkus ke Docker image, lalu jalankan di ECS, EC2, atau service lain. Modul deploy akan membahas detailnya, tetapi pola pikirnya dimulai dari sini.

05

Static Typing yang Lebih Ketat dari TypeScript

TypeScript memberi rasa aman di atas JavaScript, sedangkan Go menjadikan tipe sebagai bagian asli dari bahasa dan proses compile.

TypeScript membantu developer React menghindari bug bentuk data, props, response API, dan union state. Tetapi TypeScript akhirnya dikompilasi menjadi JavaScript, sehingga tipe tidak menjadi bagian dari runtime JavaScript. Go berbeda. Tipe adalah bagian inti bahasa dan compiler akan menolak program yang melanggar kontrak tipe.

TypeScript: tipe di atas JavaScript
  • any bisa mematikan proteksi tipe.
  • Tipe hilang setelah transpilasi ke JavaScript.
  • Runtime tetap JavaScript dan tetap bisa menerima data liar dari luar.
Go: tipe adalah bahasa itu sendiri
  • Tidak ada any sebagai jalan pintas universal.
  • Compiler menolak operasi yang tidak cocok secara tipe.
  • Data dari luar harus diparse, divalidasi, dan dipetakan ke struct dengan jelas.

Contoh kontrak data produk skincare.

internal/product/product.go
package product type Product struct { ID int64 Name string Brand string SkinType string PriceRupiah int64 Stock int IsPublished bool } func CanBeSold(p Product) bool { return p.IsPublished && p.Stock > 0 && p.PriceRupiah > 0 }

Kalau kamu mencoba mengisi PriceRupiah dengan string di dalam kode Go, compiler akan protes sebelum aplikasi jalan.

internal/product/broken_example.go
package product func BrokenProduct() Product { return Product{ ID: 101, Name: "Hydrating Toner", Brand: "Glow Lab", PriceRupiah: "129000", // error: cannot use "129000" (untyped string) as int64 } }

Kode di atas gagal dikompilasi karena PriceRupiah butuh int64, bukan string. Ini terasa cerewet di awal, tetapi sangat membantu saat proyek mulai punya banyak fitur dan banyak kontributor.

Tidak ada undefined, yang ada zero value

Salah satu kebiasaan JavaScript yang perlu dilepas adalah refleks mengecek undefined dan null di mana-mana. Di Go, setiap variabel yang dideklarasikan selalu punya nilai awal yang pasti sesuai tipenya. Tidak ada keadaan “belum terdefinisi” yang mengambang.

zero value

Nilai default otomatis tiap tipe saat dideklarasikan tanpa nilai awal: 0 untuk angka, "" untuk string, false untuk bool, dan nil untuk pointer, slice, map, serta interface. Tidak ada undefined seperti di JavaScript.

internal/product/zero_value.go
package product func DraftProduct() Product { var p Product // semua field langsung terisi zero value // p.Name == "" (string) // p.Stock == 0 (int) // p.PriceRupiah == 0 (int64) // p.IsPublished == false (bool) return p }
🌉Bridge: dari DTO TypeScript ke struct Go

Kalau di TypeScript kamu biasa menulis type ProductResponse = ..., di Go kamu akan menulis type Product struct .... Bedanya, struct Go ikut diperiksa compiler saat build backend, bukan hanya membantu editor.

⚠️Jebakan

Static typing tidak menggantikan validasi input. JSON dari user, query parameter, dan webhook payment tetap harus divalidasi karena data dari luar datang sebagai byte dan string yang belum tentu benar.

06

Filosofi Simplicity-First

Go sengaja memilih bahasa yang kecil dan pola yang eksplisit supaya program jangka panjang mudah dirawat.

Effective Go menekankan bahwa menulis Go dengan baik berarti memahami properti, idiom, dan konvensi Go. Ini penting karena Go tidak hanya soal sintaks, tetapi juga gaya berpikir: lebih sedikit magic, lebih banyak alur yang terlihat.

Bagi developer React, ini mirip saat tim sepakat memakai pola state management yang jelas, bukan setiap halaman punya arsitektur berbeda. Bagi developer Laravel, ini berbeda dari framework yang menyediakan banyak magic lewat container, facade, model lifecycle, dan convention over configuration.

Formatting satu standar

gofmt membuat perdebatan gaya indentasi dan spacing hampir hilang.

Error eksplisit

Fungsi yang bisa gagal biasanya mengembalikan error, lalu pemanggil wajib memutuskan responsnya.

Import jelas

Dependency terlihat dari import dan go.mod, bukan terselip dalam global helper atau magic autoload.

Contoh gaya eksplisit saat mengambil produk.

internal/product/service.go
package product import "context" type Repository interface { FindByID(ctx context.Context, id int64) (Product, error) } type Service struct { repo Repository } func NewService(repo Repository) *Service { return &Service{repo: repo} } func (s *Service) Detail(ctx context.Context, id int64) (Product, error) { p, err := s.repo.FindByID(ctx, id) if err != nil { return Product{}, err } return p, nil }

Perhatikan pola yang akan sering muncul di modul berikutnya: context.Context sebagai parameter pertama, dependency lewat interface kecil, constructor mengembalikan struct, dan error dikembalikan sebagai nilai.

🌉Bridge: dari magic Laravel ke dependency terlihat

Di Laravel, Service sering otomatis mendapat dependency lewat container dan type-hint constructor. Di Go tidak ada container ajaib: kita merakit dependency sendiri lewat fungsi seperti NewService(repo). Awalnya terasa manual, tetapi alur dependency jadi gamblang dan mudah ditelusuri.

💡Pola idiomatik yang mulai dibiasakan

Untuk service layer, biasakan menerima interface kecil yang dibutuhkan dan mengembalikan struct konkret. Ini menjaga kode mudah dites tanpa membuat desain terlalu abstrak.

07

Use Case Backend yang Cocok untuk Go

Go nyaman dipakai untuk REST API, background job, worker, CLI, dan infrastructure tooling.

Dalam proyek nyata, backend bukan hanya satu web server. Ada API yang menerima request dari frontend, worker yang mengerjakan pekerjaan lambat, CLI untuk maintenance, dan tool kecil untuk migrasi atau seed data. Go bisa mengisi semuanya dengan bahasa dan toolchain yang sama.

REST API

Go API menerima request dari React frontend, validasi payload, menjalankan service, lalu mengembalikan JSON.

Background job

Worker memproses email order confirmation, sinkronisasi stok, cleanup cart lama, dan retry webhook.

CLI internal

Command kecil bisa dipakai untuk seed kategori skincare, membuat admin pertama, atau menjalankan backfill data.

Infrastructure tooling

Banyak tool cloud-native memakai Go karena binary mudah didistribusikan dan performanya baik untuk operasi sistem.

Untuk REST API, gambaran konkretnya kira-kira seperti ini. Kita belum membangunnya sekarang, tetapi bentuk endpoint inilah yang akan kita kejar di Roadmap 2.

GET /v1/products Daftar produk skincare dengan filter skin type dan paginasi
POST /v1/cart/items Tambah produk ke keranjang pembeli
POST /v1/checkout Ubah keranjang jadi order dalam satu transaksi
Arah struktur proyek Go Artisan
  • cmd/
  • api/
  • main.go entry point HTTP API
  • worker/
  • main.go entry point background worker
  • skincarectl/
  • main.go CLI internal proyek
  • internal/
  • product/ fitur katalog produk skincare
  • cart/ fitur keranjang
  • checkout/ fitur checkout dan order
  • go.mod
📌Belum perlu terlalu dalam

Struktur di atas belum final. Modul arsitektur akan merapikan package, layer, config, dependency injection sederhana, dan batas antar domain.

08

Posisi Go di Stack Online Shop Skincare

Di proyek kita, Go akan menjadi API layer dan worker layer yang menghubungkan frontend React, PostgreSQL, payment provider, dan layanan pendukung.

Diagram berikut menunjukkan gambaran awal. Kita belum bicara chi, pgx, Docker, atau AWS secara detail, tetapi kamu sudah bisa melihat kenapa Go cocok berada di pusat backend.

flowchart LR
  FE["React Frontend"] -->|HTTP JSON| API["Go API Layer"]
  API -->|service domain| Domain["Service Layer"]
  Domain -->|SQL via pgx| DB[("PostgreSQL")]
  API -->|enqueue task| Queue["Job Queue"]
  Queue --> Worker["Go Worker Layer"]
  Worker -->|email, sync stok, retry webhook| External["Email / Payment / Inventory"]
  Worker --> DB

Gambar 2. Posisi Go API dan Go Worker di stack backend online shop skincare.

Untuk melihat kenapa pembagian API dan worker itu penting, perhatikan satu alur checkout. API mengerjakan bagian yang harus cepat dan pasti, lalu menyerahkan pekerjaan lambat ke worker.

sequenceDiagram
  participant FE as React Frontend
  participant API as Go API
  participant DB as PostgreSQL
  participant Q as Job Queue
  participant W as Go Worker
  FE->>API: POST /v1/checkout
  API->>DB: Simpan order dan kunci stok (transaksi)
  API->>Q: Antre job kirim email invoice
  API-->>FE: 201 Created (jalur cepat)
  Q->>W: Serahkan job
  W->>W: Kirim email, sinkron stok ke gudang
  W->>DB: Tandai job selesai

Gambar 3. API menahan hanya pekerjaan inti checkout. Email dan sinkronisasi stok dikerjakan worker setelah respons dikirim, sehingga pembeli tidak menunggu pekerjaan lambat.

API layer

API layer adalah pintu masuk dari frontend. Contohnya GET /v1/products, POST /v1/cart/items, dan POST /v1/checkout. Modul Roadmap 2 akan memakai net/http dan chi untuk routing, middleware, dan handler yang rapi. Sejak Go 1.22, net/http bahkan sudah bisa routing berbasis method dan path sederhana, lalu chi melengkapi kebutuhan middleware dan grup rute.

Worker layer

Worker layer menangani pekerjaan yang tidak harus selesai di dalam request utama. Contohnya mengirim email invoice, sinkronisasi stok ke sistem gudang, membersihkan cart kadaluarsa, dan retry notifikasi payment provider.

PostgreSQL

PostgreSQL menjadi sumber data utama. Nanti kita memakai pgx dan pgxpool untuk query, transaksi checkout, lock stok, dan repository layer.

🌉Bridge: dari React mental model

Bayangkan Go API seperti server action yang benar-benar terpisah dan lebih strict. React mengirim intent lewat HTTP, Go memvalidasi, menjalankan aturan bisnis, lalu menyimpan state final ke PostgreSQL.

💡Desain awal

Request checkout sebaiknya tidak mengirim email langsung di path utama. API cukup membuat order dan job, worker mengurus pekerjaan lambat setelah transaksi utama aman.

09

Hands-on Ringan

Sekarang kita buat program Go kecil yang mensimulasikan service katalog produk skincare tanpa framework.

Tujuan hands-on ini bukan membangun API production. Tujuannya hanya melihat bagaimana Go memakai module, package, struct, function, compile, dan run.

Buat folder proyek

Kita mulai dengan module Go yang nanti menjadi cikal bakal backend online shop skincare.

Tulis domain sederhana

Kita buat struct Product dan fungsi kecil untuk mengecek apakah produk bisa dijual.

Jalankan dengan go run

Kita pakai go run untuk development loop cepat.

Build binary

Kita pakai go build agar kamu merasakan perbedaan source code dan executable.

Terminal
mkdir skincare-backend cd skincare-backend go mod init github.com/kamu/skincare-backend mkdir -p cmd/catalog internal/product
internal/product/product.go
package product type Product struct { ID int64 Name string Brand string SkinType string PriceRupiah int64 Stock int IsPublished bool } func CanBeSold(p Product) bool { return p.IsPublished && p.Stock > 0 && p.PriceRupiah > 0 }
cmd/catalog/main.go
package main import ( "fmt" "github.com/kamu/skincare-backend/internal/product" ) func main() { toner := product.Product{ ID: 101, Name: "Hydrating Toner", Brand: "Glow Lab", SkinType: "dry", PriceRupiah: 129000, Stock: 12, IsPublished: true, } fmt.Printf("%s bisa dijual: %t\n", toner.Name, product.CanBeSold(toner)) }
Terminal
go fmt ./... go run ./cmd/catalog go build -o bin/catalog ./cmd/catalog ./bin/catalog

Output yang diharapkan.

Terminal
Hydrating Toner bisa dijual: true
⚠️Perhatikan satuan uang

Contoh memakai PriceRupiah sebagai integer agar tidak memakai floating point untuk uang. Untuk proyek Indonesia, nama PriceRupiah membuat satuan lebih jelas saat membaca domain model.

💡Rasakan loop yang cepat

Ubah Stock menjadi 0, lalu jalankan ulang go run ./cmd/catalog. Output berubah menjadi false. Loop edit, run, lihat hasil yang cepat inilah salah satu alasan Go nyaman dipakai sehari-hari.

10

Jebakan Umum dari JS dan PHP

Developer JS dan PHP biasanya cepat produktif di Go, tetapi beberapa kebiasaan lama perlu ditahan.

1. Mencari framework besar terlalu cepat

Di Laravel, framework adalah pusat gravitasi. Di Go, standard library dan package kecil sering lebih idiomatik. Kita akan memakai chi untuk routing, tetapi tetap menjaga bisnis utama tidak bergantung pada router.

2. Menganggap compiler sebagai musuh

Compiler Go memang cerewet. Import tidak dipakai, variabel tidak dipakai, tipe tidak cocok, semua akan dihentikan. Ini bukan penghambat, ini mekanisme menjaga codebase tetap bersih.

3. Membawa pola any ke Go

Go punya any sebagai alias resmi untuk empty interface sejak Go 1.18, tetapi ia bukan alat default untuk melewati desain tipe. Untuk domain online shop, struct yang jelas lebih aman daripada peta bebas yang isinya ditebak saat runtime.

4. Menyembunyikan error

Di JavaScript dan PHP, error sering ditangani dengan exception atau framework handler global. Di Go, error adalah nilai. Kalau operasi database gagal, service harus memutuskan apakah error diteruskan, dibungkus, atau diterjemahkan ke response yang tepat.

5. Membuat abstraction terlalu awal

Karena terbiasa dengan design pattern, developer sering membuat folder dan interface banyak sebelum ada kebutuhan nyata. Go biasanya lebih suka abstraksi kecil yang muncul dari kebutuhan testing dan boundary yang jelas.

Jebakan yang Harus Diingat

  • Jangan mencari Laravel versi Go. Cari gaya Go yang sederhana dan eksplisit.
  • Jangan melawan compiler. Biarkan compiler menjadi reviewer pertama.
  • Jangan memakai any untuk domain data yang seharusnya punya bentuk jelas.
  • Jangan menelan error. Error adalah bagian dari kontrak fungsi.
  • Jangan membuat arsitektur besar sebelum modul sederhana bisa berjalan dan dites.
11

Ringkasan & Poin Penting

Modul ini memberi fondasi mental sebelum kita masuk ke sintaks, package, function, pointer, error handling, dan HTTP API.

Yang Wajib Menempel

  • Go adalah bahasa compiled, statically typed, garbage-collected, dan opinionated, cocok untuk backend yang butuh kejelasan dan deployment sederhana.
  • Go dipilih untuk proyek online shop skincare karena cocok untuk API layer dan worker layer, bukan karena Node.js atau Laravel buruk.
  • Bridge utama dari TypeScript adalah static typing, tetapi Go lebih strict karena tipe menjadi bagian asli bahasa, diperiksa saat compile, dan tidak punya undefined (yang ada zero value).
  • Compiled workflow membuat kita berpikir tentang source code, build artifact, binary, Docker image, dan deployment sejak awal.
  • Simplicity-first berarti lebih sedikit magic, error eksplisit, formatting otomatis, package kecil, dan dependency yang terlihat.

Pemetaan ke proyek

Go API akan menangani request dari React frontend, menjalankan service domain, dan menyimpan data utama ke PostgreSQL.

Pemetaan ke worker

Go Worker akan memproses pekerjaan lambat seperti email, sinkronisasi stok, cleanup cart, dan retry webhook payment.

Langkah berikutnya

Modul berikutnya, Setup Go dan Developer Workflow, memasang Go di mesinmu lalu mengenalkan go mod init, go run, go build, go test, dan go fmt.

Prinsip belajar

Setiap fitur bahasa akan selalu dikaitkan ke kebutuhan backend online shop, bukan dipelajari sebagai sintaks kosong.

Checklist sebelum lanjut

Pastikan kamu bisa membayangkan kenapa Go memilih binary mandiri, kenapa tipe ada sejak compile, dan kenapa compiler Go sengaja menghentikan kode yang tidak rapi. Detail instalasi dan perintahnya kita kerjakan di modul berikutnya.

Progress disimpan lokal di browser ini.