Setelah berhasil menginstal Go, langkah berikutnya yang perlu dipahami adalah bagaimana sebuah project Go disusun. Pada artikel ini Anda akan mempelajari peran setiap file dan direktori penting, mulai dari
package,main,go.mod,go.sum, hingga cara membuat project Go pertama menggunakan Go Modules.
Banyak developer pemula dapat menjalankan program Go pertama mereka hanya dalam beberapa menit. Namun, ketika mulai membuat project yang lebih besar, muncul berbagai pertanyaan seperti:
Mengapa setiap file diawali dengan
package? Apa fungsipackage main? Mengapa setelah menjalankango mod initmuncul filego.mod? Kapango.sumdibuat? Bagaimana cara mengelola dependency di Go?
Pertanyaan-pertanyaan tersebut sangat wajar karena struktur project Go memang berbeda dengan beberapa bahasa pemrograman lain seperti JavaScript, Java, maupun PHP.
Salah satu alasan mengapa Go begitu disukai di industri adalah karena struktur project-nya sederhana dan konsisten. Hampir semua project Go memiliki pola yang mirip sehingga developer dapat berpindah dari satu project ke project lain tanpa perlu mempelajari struktur baru yang rumit.
Melalui artikel ini, Anda akan memahami bagaimana sebuah project Go bekerja dari dalam. Pengetahuan ini akan menjadi fondasi sebelum mempelajari variabel, fungsi, package, hingga membangun REST API menggunakan Go.
Setelah menyelesaikan artikel ini, Anda akan mampu memahami bagaimana Go mengorganisasi source code dalam sebuah project. Anda juga akan mengenal fungsi package, main, func main(), file berekstensi .go, go.mod, go.sum, serta memahami bagaimana Go mengelola dependency menggunakan Go Modules. Di akhir artikel, Anda akan berhasil membuat project Go pertama dengan struktur yang benar.
Bayangkan Anda sedang membangun sebuah gedung perkantoran.
Gedung tersebut tentu tidak dibangun secara acak. Ada ruang kerja, ruang rapat, gudang, ruang server, hingga lobi yang masing-masing memiliki fungsi berbeda. Dengan pembagian ruangan yang jelas, setiap orang mengetahui di mana mereka harus bekerja.
Project Go bekerja dengan konsep yang sama.
Setiap file memiliki tanggung jawabnya sendiri. Ada file yang menjadi pintu masuk aplikasi, ada file yang menyimpan konfigurasi project, ada pula file yang mencatat dependency yang digunakan. Karena setiap bagian memiliki perannya masing-masing, project menjadi lebih mudah dipahami dan dipelihara.
Ilustrasi sederhananya dapat digambarkan seperti berikut.
my-project/
│
├── go.mod
├── go.sum
├── main.go
└── ...Meskipun pada awalnya hanya terdiri dari beberapa file, struktur inilah yang nantinya akan berkembang menjadi aplikasi yang jauh lebih besar.
Buat sebuah folder baru yang akan digunakan sebagai project.
mkdir belajar-go
cd belajar-goFolder tersebut masih kosong karena kita belum membuat file apa pun.
Selanjutnya jalankan perintah berikut.
go mod init belajar-goJika berhasil, Go akan membuat sebuah file baru bernama go.mod.
belajar-go/
│
└── go.modFile inilah yang menandai bahwa folder tersebut merupakan sebuah project Go.
go.modFile go.mod dapat dianggap sebagai identitas sebuah project.
Ketika project membutuhkan library dari luar, Go akan mencatat seluruh dependency pada file ini. Selain itu, nama module yang Anda tuliskan saat menjalankan go mod init juga akan disimpan di sini.
Contohnya:
module belajar-go
go 1.25Baris pertama menunjukkan nama module, sedangkan baris kedua menunjukkan versi minimum Go yang digunakan oleh project.
Pada project nyata, file ini juga akan berisi daftar dependency yang digunakan aplikasi.
main.goSekarang buat file baru bernama main.go.
belajar-go/
│
├── go.mod
└── main.goIsi file tersebut sebagai berikut.
package main
import "fmt"
func main() {
fmt.Println("Hello, Golang!")
}Meskipun terlihat sederhana, program di atas memperkenalkan tiga konsep penting dalam Go, yaitu package, main, dan fungsi main().
packageJika diperhatikan, hampir semua file Go selalu diawali dengan kata package.
package mainPackage dapat diibaratkan seperti sebuah folder yang mengelompokkan kode berdasarkan tanggung jawabnya.
Sebagai contoh, sebuah aplikasi e-commerce mungkin memiliki package product, order, dan payment. Dengan pemisahan tersebut, setiap bagian aplikasi memiliki tanggung jawab yang jelas sehingga kode lebih mudah dipelihara.
Karena file main.go merupakan titik awal aplikasi, package yang digunakan harus bernama main.
package main?Go hanya akan menghasilkan program yang dapat dijalankan apabila menemukan package bernama main.
Apabila Anda mengganti menjadi:
package belajarmaka file tersebut tidak lagi dianggap sebagai executable program, melainkan sebuah library yang dapat digunakan oleh package lain.
Inilah alasan mengapa hampir semua aplikasi Go selalu memiliki minimal satu file dengan package main.
func main()Di dalam package main terdapat sebuah fungsi yang juga bernama main.
func main() {
}Fungsi ini merupakan pintu masuk aplikasi.
Setiap kali Anda menjalankan perintah:
go run .Go akan mencari func main() terlebih dahulu, kemudian mengeksekusi seluruh kode yang ada di dalamnya.
Apabila fungsi tersebut tidak ditemukan, aplikasi tidak dapat dijalankan.
.goSeluruh source code Go disimpan menggunakan ekstensi .go.
Misalnya:
main.go
user.go
product.go
payment.goGo akan mengompilasi seluruh file .go yang berada dalam package yang sama menjadi satu kesatuan program.
Artinya, Anda dapat memecah kode ke beberapa file tanpa perlu mengubah cara aplikasi dijalankan.
go.sumPada project yang baru dibuat, Anda mungkin belum melihat file go.sum. Hal tersebut normal.
File go.sum baru akan dibuat ketika project mulai menggunakan dependency dari luar.
Sebagai contoh:
go get github.com/google/uuidSetelah perintah tersebut dijalankan, Go akan membuat file go.sum.
Fungsi file ini adalah menyimpan checksum dari setiap dependency sehingga Go dapat memastikan library yang diunduh tetap aman dan tidak mengalami perubahan yang tidak semestinya.
Dengan kata lain, go.mod mencatat apa yang digunakan, sedangkan go.sum membantu memastikan apa yang diunduh benar-benar sesuai.
Sebelum adanya Go Modules, seluruh project harus disimpan di dalam GOPATH.
Namun, sejak Go Modules diperkenalkan, developer bebas membuat project di mana saja.
Ketika membutuhkan package baru, cukup jalankan:
go get github.com/google/uuidGo akan melakukan beberapa hal secara otomatis.
Pertama, dependency akan diunduh. Kemudian informasi package akan ditambahkan ke go.mod, sementara checksum-nya akan dicatat di go.sum.
Dengan mekanisme ini, pengelolaan dependency menjadi jauh lebih sederhana dibandingkan generasi Go sebelumnya.
Pada project kecil, satu file main.go mungkin sudah cukup. Namun, pada aplikasi yang mulai berkembang, biasakan memisahkan kode berdasarkan tanggung jawabnya, bukan berdasarkan ukuran file.
Sebagai contoh, seluruh proses autentikasi sebaiknya berada dalam package yang sama, sedangkan seluruh logika produk ditempatkan pada package yang berbeda. Pendekatan ini membuat struktur project lebih mudah dipahami oleh anggota tim lain.
Selain itu, gunakan nama package yang singkat, sederhana, dan merepresentasikan isi package tersebut. Hindari nama yang terlalu panjang atau mengandung kata-kata yang sebenarnya sudah terlihat dari struktur folder.
Kesalahan lain yang sering dilakukan pemula adalah menghapus file go.sum karena menganggapnya tidak penting. Padahal file tersebut berperan menjaga integritas dependency dan sebaiknya ikut disimpan ke dalam version control seperti Git.
Untuk memastikan Anda benar-benar memahami materi pada artikel ini, cobalah menyelesaikan tantangan berikut.
Tantangan 1
Buat sebuah project baru menggunakan nama module yang berbeda, kemudian jalankan program Hello, Golang!.
Tantangan 2
Tambahkan sebuah package baru bernama calculator, lalu buat sebuah fungsi sederhana di dalamnya. Cobalah memanggil fungsi tersebut dari main.go.
Tantangan 3
Install sebuah dependency eksternal menggunakan go get, kemudian amati perubahan yang terjadi pada file go.mod dan go.sum.
Pada artikel ini Anda telah mempelajari bahwa sebuah project Go memiliki struktur yang sederhana namun sangat terorganisir. Anda mengenal fungsi package, memahami mengapa aplikasi harus memiliki package main dan func main(), serta mengetahui peran file go.mod sebagai identitas project dan go.sum sebagai penjaga integritas dependency.
Selain itu, Anda juga berhasil membuat project Go pertama menggunakan Go Modules, yang saat ini menjadi standar dalam pengembangan aplikasi Go modern. Pemahaman mengenai struktur project ini akan sangat membantu ketika Anda mulai membangun aplikasi dengan banyak package dan dependency.
Go Modules Reference: https://go.dev/ref/mod
Managing Dependencies: https://go.dev/doc/modules/managing-dependencies
Packages: https://go.dev/ref/spec#Packages
go.mod?Ya. Pada pengembangan Go modern, setiap project sebaiknya menggunakan Go Modules sehingga memiliki file go.mod sebagai identitas project dan pengelola dependency.
package?Karena Go mengelompokkan source code ke dalam package. Dengan cara ini, kode menjadi lebih terstruktur, mudah digunakan kembali, dan lebih mudah dipelihara.
package main dengan package lainnya?package main digunakan untuk aplikasi yang dapat dijalankan (executable). Sementara package lain berisi library atau kumpulan fungsi yang dapat digunakan oleh package lain.
go.sum dibuat?File go.sum biasanya dibuat secara otomatis ketika project mulai menggunakan dependency eksternal melalui Go Modules.
go.sum?Tidak disarankan. File tersebut membantu memverifikasi integritas dependency dan sebaiknya tetap disimpan bersama project, termasuk ketika menggunakan Git.
Mini Project Golang: membuat aplikasi CLI Biodata dari nol. Ikuti langkah demi langkah membangun aplikasi command-line sederhana sambil memahami konsep dasar Golang
By Bisadev
Pelajari Command Go beserta fungsi dan cara menggunakannya. Kenali perintah penting seperti go run, go build, go test, dan go mod untuk mempercepat pengembangan aplikasi Go.
By Bisadev
Cara kerja compiler Go dijelaskan secara lengkap, mulai dari lexical analysis, parsing, type checking, optimasi, hingga menghasilkan binary yang efisien.
By Bisadev
Let's discuss how we can help you achieve your digital goals