Belajar teknologi baru bagi saya sangat menyenangkan. Ada perasaan puas setiap kali mendapatkan ilmu baru terutama yang terkait dengan IT walaupun pada intinya kadang ujung-ujungnya juga digunakan untuk hal yang sama. Contoh paling gamblang adalah kita belajar bahasa atau web framework lain yang mana dipakai untuk membuat sesuatu yang tidak jauh berbeda dengan teknologi yang kita sudah familiar sebelumnya. Tetep aja sih, ngerasa seneng.
Bulan Maret tahun ini sebenarnya saya sudah niat untuk belajar Golang. Tapi gimana pelaksanaannya? Jalan sih tapi lambat haha. Ga mau beralasan, saya ga akan menyampaikan kenapa bisa selambat itu. Yang penting di sini progress adalah progress 😄
Di tulisan ini saya ingin sharing soal penggunaan Go dasar untuk membuat aplikasi web. Bagi saya belajar Go dengan membuat web lebih menarik dan memotivasi untuk belajar lanjut dari pada belajar Go dari dasar seperti membahas percabangan, perulangan dan lain-lain. Yuk kita mulai.
Instalasi Go
Bagian yang cukup membosankan tapi harus dilakoni, untungnya kita hanya perlu melakukannya sekali. Saya jelaskan dalam bentuk step by step untuk masing-masing sistem operasi.
Mac
Instalasi di Mac kita menggunakan bantuan homebrew.
1. Jalankan brew install go
2. Tambahkan path dimana go diinstal ke dalam PATH variabel
1 2 |
$ echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bash_profile $ source ~/.bash_profile |
3. Jalankan perintah go version
untuk mengecek apakah go sudah terinstal
Windows
1. Download installer-nya di https://golang.org/dl/, sesuaikan dengan arsitekturnya (32bit atau 64bit)
2. Jalankan installer-nya, cukup klik next, next, next sampai selesai.
3. Jalankan go version
di dalam CMD untuk mengecek
Linux
1. Download file archive di https://golang.org/dl/, sesuaikan dengan arsitekturnya (32bit atau 64bit)
2. Extract archive tadi ke /usr/local
1 |
$ tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz |
3. Tambahkan path instalasi go ke PATH variabel
1 2 |
$ echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc $ source ~/.bashrc |
4. Jalankan go version
untuk melakukan pengecekan
Setting GOPATH
Setelah instalasi go ada satu hal lagi yang perlu kita urus yaitu pengaturan GOPATH. GOPATH adalah variabel yang berisi lokasi folder atau path di mana kita menyimpan project go. Di dalam sini nanti akan ada 3 folder yaitu src
, pkg
dan bin
.
Project go harus ditempatkan di dalam folder src
ini. Misalnya GOPATH kita set ke ~/go
berarti saat ingin membuat project bernama belajar_go
kita buat foldernya di ~go/src/belajar_go
Untuk set GOPATH ini caranya mirip dengan setting PATH di langkah instalasi tadi.
1 2 |
$ echo "export GOPATH=$HOME/go" >> ~/.bash_profile $ source ~/.bash_profile |
Untuk pengguna Linux export-nya ke ~/.bashrc
Hello World
Untuk formalitas dan tentunya supaya melihat bentuk dari bahasa Go, mari kita lakukan ritual menulis program Hello World. Buat file bernama hello.go
.
1 2 3 4 5 6 7 |
package main import "fmt" func main(){ fmt.Println("Halo Keindahan Dunia") } |
Dari sini yang paling mencolok bagi saya selaku orang Ruby adalah indentasinya yang 8 spasi alih-alih 2 (salah fokus). Mari kita bahas satu-satu supaya paham.
Setiap file program di Go harus memiliki package dan di setiap project harus ada package yang bernama main
yang digunakan sebagai entry point pengeksekusian progam. package main
artinya kita menyatakan kalau file hello.go
berada di package main
.
Selanjutnya bagian import "fmt"
sudah self explanatory, melakukan import terhadap package yang namanya fmt
.
Di setiap program Go harus ada function yang bernama main()
yang letaknya ada di dalam package main
. Dari sini kita sudah bisa menebak kalau function ini adalah yang dijalankan pertama kali saat eksekusi program. Deklarasi function di Go menggunakan keyword func
diikuti nama function-nya.
Terakhir adalah kita panggil function Println()
yang ada di dalam package fmt
untuk menampilkan sesuatu.
Jalankan go run hello.go
untuk mengeksekusi kode di dalam file hello.go
. Outputnya seperti ini.
Hello Web
Sekarang giliran kita belajar membuat hello world tapi di web. Go sudah datang dengan package yang memampukan kita membuat aplikasi web yang simpel. Yuk langsung koding. Buat file hello_web.go
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "fmt" "net/http" "time" ) const PORT = ":8080" func handleDynamic(w http.ResponseWriter, r *http.Request){ response := "Halo Keindahan Dunia " + time.Now().String() fmt.Fprintln(w, response) } func main(){ http.HandleFunc("/", handleDynamic) err := http.ListenAndServe(PORT, nil) if err != nil { fmt.Println("Error :" + err) } } |
Kita bahas satu-satu yang baru di sini. Pertama adalah kita bisa melakukan import beberapa package sekaligus dengan bentuk yang seperti itu. Ada 2 package baru kali ini. Gunanya apa? Nanti akan tahu.
Membuat konstanta di Go digunakanlah keyword const
, ini artinya kita punya konstanta bernama PORT
yang nilainya string :8080
.
Nah sekarang kita ke bagian yang menarik. Di Go, kita perlu membuat function yang menerima parameter http.ResponseWriter
dan pointer http.Request
yang kita pakai untuk menangani sebuah request http. Jadi kita buatlah function handleDynamic
ini yang isinya menampilkan pesan Halo Keindahan Dunia
diikuti waktu saat ini.
Sangat perlu diperhatikan adalah kita menggunakan Fprintln()
kali ini, bukan lagi Println()
seperti di program pertama. Fprintln()
membutuhkan parameter pertama berupa writer.
Deklarasi variabel di Go ada 2 cara. Yang pertama adalah dengan menyebutkan tipe datanya dan yang kedua tanpa menyebutkan tipe data secara eksplisit tetapi cara yang ini sebuah variabel harus langsung diberi nilai.
Contoh cara pertama
1 2 |
var response string response = "Halo Keindahan Dunia" |
Kita gunakan keyword var
diikuti nama variabel kemudian tipe datanya. Dari situ suatu variabel bisa diberi nilai. Atau kalau mau langsung bisa jadi seperti ini.
1 |
var response string = "Halo Keindahan Dunia" |
Nah cara yang kedua adalah kita tak perlu menyebutkan tipe datanya. Seperti ini
1 |
response := "Halo Keindahan Dunia" |
Yang jadi pembeda utama adalah untuk memberikan nilai kita menggunakan :=
bukan =
. Ini hanya dipakai untuk membuat variabel baru sekaligus memberikan nilainya. Jika kemudian kita ingin memberikan nilai baru maka cukup =
1 2 |
response := "Halo Keindahan Dunia" response = response + " Dalam Berita" |
Lanjut lagi ada function main
. Di dalam sini kita daftarkan function handleDynamic
untuk menangani request http yang mampir ke /
atau root url. Cara seperti ini biasanya disebut dengan routing, mengarahkan suatu request ke suatu url kepada kode program tertentu.
Terakhir kita jalankan http server dengan function ListenAndServe()
. Di sini kita tangkap kembaliannya berupa error terus dicek deh itu ada errornya atau enggak, kalau ada maka kita tampilkan di console.
Go beda dengan yang lain dalam hal penanganan error. Di Go tidak ada yang namanya exception, alih-alih yang ada adalah mengembalikan nilai error jika ada.
Sebagai contoh coba hilangkan tanda :
dari dalam konstanta PORT
dan hilangkan juga bagian pengecekan err
nil atau tidak. Niscaya ketika kita jalankan go run hello_web.go
tidak akan muncul exception apa-apa dan tidak pula kita bisa mengakses localhost:8080
dan kita bengong aja ga tahu kenapa.
Sekarang jalan kan go run hello_web.go
.