Modul Basic Go Lang Web DeveloperV
Modul Basic Go Lang Web DeveloperV
oleh Google. Go-Lang populer di kalangan “tech” karena learning curve-nya yang
● Golang (https://go.dev/dl/)
● Git (https://git-scm.com/downloads)
● PostgreSQL (https://www.postgresql.org/download/)
● Docker (optional)
Mengapa Go-Lang?
Dari semua bahasa pemrograman yang ada, mungkin banyak yang bertanya,
menggunakan rust atau phyton? Dari sisi kemudahan, python merupakan salah
satu bahasa yang paling mudah untuk dipelajari. Sementara di satu sisi, rust
performa.
Go-Lang pertama kali dirancang oleh Robert Griesemer, Rob Pike dan Ken
Thompson sebagai sebuah projek sampingan di Google. Lalu pada tahun 2008,
Dan pada tahun 2009 projek Go dirilis ke publik sebagai bahasa pemrograman
open source. Semenjak saat itu, Go-Lang telah digunakan oleh programer dan IT.
Karakteristik Go-Lang
● Statically Typed
Variabel yang digunakan harus memiliki tipe data tersendiri. Hal ini bagus
digunakan.
● High-performance
Set up Go-Lang
akan dipakai dalam projek kali ini, terlebih dahulu menginstall dan melakukan
● Dua cara untuk melihat output hasil kode yaitu go build dan go run
https://github.com/Rocksus/go-restaurant-app
Primitive type merupakan kumpulan tipe-tipe data di Go-Lang yang paling dasar
(tidak bisa diturunkan) dan digunakan sebagai bahan bangunan tipe data yang
lain.
● Dua cara untuk mendeklarasikan variabel yaitu long declaration dan short
declaration
Turunan Tipe
No Type Keterangan
nilai imajiner
data kosong
Functions at Go-Lang
3) Tidak bisa dimulai dengan kata spesial kecuali dengan tanda (_)
Pointers
memanggil address lain dan mengubah variabel dari jauh menggunakan tanda
(*). Pointers juga dapat digunakan untuk membuat MT value yang bisa keluar 0
atau nil. Simbol yang digunakan untuk mengirim address dari variabel adalah
tanda (&). Selain itu, pointers dapat ditambah dengan data baru dengan kata
“new”
Conditionals
1) if, else if, else digunakan untuk kondisi yang memiliki syarat
diimplementasi
● Method bisa digunakan oleh dua hal yaitu type alias dan struct
● Type alias adalah tipe data baru yang kita ambil dari tipe lain
Manfaat REST
● Stateless
API yang tidak memiliki state internal di dalam servernya dan hanya
● Cacheable
● Flexibility
Tidak terikat pada satu data atau resources. Contohnya respon dapat
Pada project kali ini, akan membuat API service untuk sebuah restoran yang bisa
melihat menu, memesan makanan dan minuman. Dalam API service restoran ini
● Setelah go get di run, go mod akan langsung terupdate dan akan muncul
go sum
● go sum adalah sebuah version manager untuk melihat versi yang kita
gunakan
Handler
request
Connect Service to Data Source
Jika sudah memiliki ribuan data code, sebaiknya gunakan database agar dapat
di-maintain dan memiliki keamanan data yang baik. Di dalam proyek ini akan
digunakan secara tabel, baris dan kolom. berikut ini cara connect service to data
source:
beberapa bagian yang disebut sebagai “layers”. Layers ini terdiri dari entity, use
Clean Architecture
Untuk memahami lebih jauh mengenai clean architecture dapat membaca buku
Design karya Robert C. Martin. Inti dari buku tersebut adalah dalam service kita
architecture adalah alur kode menjadi jelas dan terstruktur, serta tanggung
● Pilih menu “model” dan buat model baru dengan nama order.go
- OrderStatusProcessed
- OrderStatusFinished
- OrderStatusFailed
- ProductOrderStatusPreparing
- ProductOrderStatusFinished
● Terdapat fitur primary key dan foreign key yang berfungsi untuk
● Pilih menu “usecase” yang akan digunakan untuk resto.go dan usecase.go
GetOrderInfo
AutoMigrate di seed.go
Ilustrasi CORS
Studi Kasus CORS
terminal
Seorang backend harus membuat user management supaya user dapat register
dan login di API service web milik sendiri. Cara untuk mengetahui kebenaran user
adalah dengan menggunakan akses token JWT. JWT (JSON Web Token)
Struktur JWT
● Signature diambil dengan cara mengambil data dari header dan payload,
password
● Argon2 adalah sebuah algoritma hash yang keluar di tahun 2015 dan
Repository interface
interface
● Cek login session dalam aplikasi Insomnia dan kita akan mendapatkan jwt
token
● Untuk mengecek isi jwt token diperlukan website yaitu jwt.io yang
Go-Lang sudah memiliki built in packed untuk logging. Untuk itu, cara
● Projek ini akan menggunakan logrus yang bisa di-install melalui go get
github.com/sirupsen/logurs
dari logging, metrics dan traces, lengkap dengan tools-nya. Berikut ini cara
mengambil go.opentelemetry.io/otel/trace
● Pada open telemetry kita akan menggunakan context (seperti pada
● Instal go.opentelemetry.io/otel/sdk/trace
● Instal go.opentelemetry.io/exporters/jaegers
● Cek hasil koding tracing pada Docker (instal di docker run -d –name
jaeger\)
Code
Handling Panics
● Sebagai contoh pembuatan unit tests, ambil salah satu usecase yaitu
GetMenuList
-mock_names=Usecase=MockRestoUsecase
-destination=.internalmocks/resto_usecase,mock.go
-source=.internal/usecase/resto/usecase.go
● Setelah kita run akan muncul folder baru yaitu mock yang di dalamnya
-mock_names=Repository=MockMenuRepository
-destinantion=../../mocks/menu_repository_mock.go
-source=repository.go
● Untuk pembuatan unit test, klik resto.go, klik kanan kemudian pilih Go:
Generate Unit Tests for Function dan akan otomatis ada folder
resto_test.go
bahasa manusia. BDD berfungsi sebagai jembatan antara tim engineer dan tim
bisnis. Salah satu library yang support BDD adalah Ginkgo. Berikut ini cara
menginstal Ginkgo:
● Cara instal Ginkgo pada terminal: go install
github.com/onsi/ginkgo/v2/ginkgo
● cd internal/usecase/resto
BeforeEach
● Penggunaan unit test dengan Ginkgo atau unit test dari Go-Lang bisa
TDD vs BDD
TDD dan BDD memiliki perbedaan baik dalam fungsi dan tujuannya. Namun TDD
fungsi ini sebaiknya membuat terlebih dahulu sebuah behavior yang diinginkan
dari sebuah fitur, lalu menggunakan test development untuk iterasi yang dapat
Concurrency
Goroutines merupakan fitur untuk menjalankan lebih dari satu fungsi secara
lebih ringan dan efisien dibandingkan dengan multithreading biasa. Berikut cara
akan dipanggil
time.Sleep
● Data Race: Ketika previous value dan current value berubah di tengah
Mutex
dapat dipakai
Channels
berikut:
menggunakan select
tersebut
Generics
Generic dikenal sebagai fitur baru di Go-lang yang muncul pada versi 1.18.
Generic dapat digunakan untuk membuat fungsi yang bisa berinteraksi dengan
lebih dari satu tipe dan menjumlahkan data-data yang memiliki tipe data yang
berbeda dengan maintain fungsi-fungsi yang sama namun tipe data yang
berbeda.
Implementasi Generics
fungsi saja
menyimpan data.
Implementasi Caching