Make Simple Applications to use Golang (Go-Chi)

--

Image by David Thielen

Assalamu’alaikum Warahmatullah Wabarakatuh,

Okeh kalo pada part1 kira sudah bahas bagaimana cara kita men-setup kubernetes cluster sederhana pada VM di GCP menggunakan Kubespray, nah pada part2 ini kita coba bahas bagaimana caranya kita membuat sebuah simple aplikasi menggunakan go-chi, tapi sebelum kita mulai, kita coba kenalan dulu dengan salah satu library routing ini.

Go-Chi

pada deskripsinya dijelaskan bahwa go-chi adalah sebuah lightweight, idiomatic and composable router untuk membuat Go HTTP Service. go-chi bisa juga digunakan untuk membuat REST API yang bersekala besar, karena go-chi sendiri dibuat menggunakan native http library bawaaan Golang.

Mulai Coding

nah disini saya coba bikin simple Go HTTP Service menggunakan go-chi, okeh sebelum itu kita siapkan satu folder yang nantinya akan kita gunakan untuk membuat aplikasi, kita bisa menjalankan perintah, kemudian kita bisa membuat folder tersebut kita bisa membukanya di code editor seperti VSCode

mkdir simple-http-go-appcd simple-http-go-appcode .

kemudian kita bisa membuat satu file main.go, yang nantinya kita akan gunakan untuk menjalankan aplikasi kita.

Sebelum kita memulai menulis kode pada aplikasi kita, kita bisa meninisialisasi projek kita dan menginstall library go-chi.

cd simple-http-go-appgo mod init simple-http-go-appgo get -u github.com/go-chi/chi/v5

Naise, dependency yang kita butuhkan sudah siap, gas langsung kita mulai ngoding. Hal pertama yang harus kita lakukan adalah menulis package yang akan digunakan, disini karena kita hanya memiliki main.go, kita akan menggunakan package main, dan kemudian kita juga mendefinisikan function main yang nantinya akan pertama kali dijalankan.

package mainimport ("fmt""io/ioutil""log""net/http"// Library yang akan digunakan"github.com/go-chi/chi/v5""github.com/go-chi/chi/v5/middleware""github.com/go-chi/render")func main() {r := chi.NewRouter()// Middleware ini digunakan untuk melakukan logging request yang masuk// Dan juga memberikan unique ID setiap request yang masukr.Use(middleware.RequestID)r.Use(middleware.Logger)// Dibawah ini kita membuah 4 buat routing dengan GET Methoder.Get("/", func(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json") // Content type JSONw.WriteHeader(http.StatusOK) // Response 200OKlog.Println(w.Write([]byte(`{"status":"root"}`)))})r.Get("/ping", func(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json") // Content type JSONw.WriteHeader(http.StatusOK) // Response 200OKlog.Println(w.Write([]byte(`{"status":"pong"}`)))})r.Get("/panic", func(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json") // Content type JSONw.WriteHeader(http.StatusBadRequest) // Response 400 Bad Requestlog.Println(w.Write([]byte(`{"status":"error"}`)))})r.Get("/quotes", func(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json") // Content type JSONresp, err := http.Get("https://api.quotable.io/random") // Fetch API// Mengecek apabila gagal melakukan fetch APIif err != nil {log.Fatalln(err)}// Mengambil response bodybody, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatalln(err)}// Mengubah response body menjadisb := string(body)w.WriteHeader(http.StatusOK) // Response 200 OKlog.Println(w.Write([]byte(sb))) // Mencetak response body})fmt.Println("Listening to port 3000")log.Println(http.ListenAndServe(":3000", r)) // Running http server di port 3000}

Hasil

About me

I’m Muhammad Abdur Rofi Maulidin, a DevOps Engineer passionate about optimizing software development processes by supporting cloud infrastructure management like kubernetes orchestration, and automations. Dedicated to support the reliability, availability, and performance of systems by implementing SLI/SLO based on performance monitoring for business requirement.

Feel free to keep in touch with me:

Let’s go to the cloud 🚀

Free Palestine 🇵🇸

--

--

No responses yet