Golang Clean Architecture Project Source Code for Free!
Oke, ini adalah open source project RESTFul API dengan penerapan Clean Architecture pada Golang untuk kalian para Gopher yang sedang belajar Golang tahap lanjutan. Source code ini bisa kalian pakai sebagai boilerplate, agar kalian atau saya sendiri tidak capek ketika akan memulai projek baru.
Skip dari sini dan langsung ke paling bawah kalau kalian mau langsung clone projeknya 🤡 ✨
👀 Background
Ketika membuat projek Golang, seringkali strugle dengan struktur foldernya dan kebanyakan mengkuti gaya MVC (Model View Controller). Bagi programmer yang terbiasa dengan “Laravel” pasti struktur foldernya akan mirip dengan struktur folder Laravel. Saya sendiri pernah membuatnya seperti itu dan it’s ok aja sejauh ini di level Production, mudah di maintenance dan didokumentasikan.
Yang jadi pertanyaan besarnya adalah bagaimana struktur folder projek Golang sendiri? dan bagaimana jika ingin mengunakan Clean Architecture?. Artikel ini akan menjelaskan hal tersebut beserta alasan-alasan dasar mengenai keresahan dalam pembuatan aplikasi dengan Golang.
🤖 Objective
Projek open source ini bertujuan untuk menyediakan boilerplate RESTful API yang menerapkan prinsip-prinsip Clean Architecture dengan menggunakan bahasa pemrograman Golang.
Dengan proyek ini, para developer Golang, khususnya mereka yang berada pada tahap lanjutan, dapat mempelajari dan menerapkan praktik terbaik dalam mengembangkan aplikasi yang bersih, terstruktur, dan mudah dipelihara.
Selain itu, boilerplate ini dirancang untuk menghemat waktu dan usaha, sehingga kalian dapat lebih fokus pada pengembangan fitur dan logika bisnis tanpa harus memulai dari awal setiap kali membuat proyek baru. Dan projek ini terinspirasi dari Golang Clean Architecture dari Eko Kurniawan Khannedy yang bisa kalian download atau clone dari Github.
🙋 F.A.Q
Apa itu RESTFul API?
Singkatan dari Representational State Transfer Application Programming Interface yang digunakan untuk membuat web service atau jembatan data agar interaksi antar aplikasi menjadi mudah dilakukan dengan protokol HTTP.
Apa itu Clean Architecture?
Konsep pengembangan software yang diperkenalkan oleh Robert C. Martin (alias Uncle Bob). Tujuannya adalah untuk menciptakan sistem yang mudah dipahami, mudah diuji, dan fleksibel dalam hal perubahan.
Apakah Golang punya standar struktur projek?
Tidak. Di dokumentasi Go sendiri tidak ada panduan tentang bagaimana seharusnya desain struktur kode aplikasi, Russ Cox yang merupakan Tech Lead Golang memberikan pernyataannya disini.
Adakah standar struktur projek Golang yang bisa jadi acuan?
Jawabannya tentu ada disini, namun sekali lagi, kalian dibebaskan dan leluasa untuk membuat struktur projek sesuka hati.
📚 Library
Projek ini menggunakan library-library sebagai berikut:
- Gin sebagai web framework
- Go Validation untuk validasi object payload atau form data
- Google Wire untuk dependency injection
- Gorm untuk mempermudah kita dalam pembuatan query
- Go Viper untuk load config dari file atau remote config
- Go Migration untuk membuat migration file
- MySQL sebagai database
- Go JWT untuk authorization bearer token
- Testify unit test karena secara default go tidak menyediakan assertion ataupun mock
Sebenarnya banyak sekali pilihan web framework untuk projek ini diantaranya yaitu: Fiber, Echo atau Beego. Tapi saya sendiri senang dengan kepopuleran Gin dan sudah include validator.
👾 Concept
Clean Architecture
Layer of Clean Architecture
🛠️ Code Explanation
Saya akan update penjelasan kodenya disini, tapi nanti 🤧.
✅ Next Task
Projek ini sudah bisa dijalankan dan nantinya akan diupdate terus sesuai kebutuhan atau kalian sendiri yang akan melanjutkannya, masih ada beberapa yang kurang di implementasikan yaitu:
- Unit Test
- Benchmark Test
- Docstring (Dokumentasi didalam kode)
- API Spec (Swagger Docs)
- Dockerfile
- Docker Compose
- Readme file