Salah satu alasan mengapa Golang dikenal cepat adalah karena proses kompilasinya yang sederhana dan efisien. Pada artikel ini, Anda akan mempelajari bagaimana Go mengubah source code menjadi executable, memahami perbedaan antara
go rundango build, mengenal konsep binary serta cross compile, hingga menghasilkan aplikasi yang dapat dijalankan di berbagai sistem operasi.
Ketika pertama kali belajar Go, kebanyakan developer hanya menjalankan perintah seperti go run main.go tanpa benar-benar memahami apa yang terjadi di balik layar. Program memang berjalan, tetapi muncul pertanyaan seperti: mengapa Go menghasilkan file executable? Apa bedanya go run dengan go build? Mengapa aplikasi Go bisa dijalankan di server tanpa harus menginstal Go terlebih dahulu?
Memahami cara kerja compiler bukan hanya sekadar teori. Dalam dunia backend, proses deployment hampir selalu melibatkan hasil kompilasi aplikasi. Ketika sebuah service akan dijalankan di server, Docker, atau platform cloud seperti AWS dan Google Cloud, yang dipindahkan bukan lagi source code, melainkan binary hasil kompilasi.
Oleh karena itu, memahami proses compile, build, dan binary akan membantu Anda memahami bagaimana aplikasi Go dipersiapkan sebelum dijalankan di lingkungan produksi.
Setelah menyelesaikan artikel ini, Anda akan memahami bagaimana compiler Go bekerja dalam mengubah source code menjadi executable. Anda juga akan mampu membedakan proses compile, build, dan run, mengetahui fungsi binary yang dihasilkan Go, melakukan cross compile untuk sistem operasi lain, serta menghasilkan executable pertama dari project Go yang telah dibuat.
Bayangkan Anda sedang menulis sebuah buku.
Naskah yang Anda tulis menggunakan Microsoft Word belum bisa langsung dicetak menjadi buku yang dijual di toko. Naskah tersebut harus melalui proses layout, editing, hingga akhirnya dicetak menjadi buku fisik.
Go bekerja dengan konsep yang hampir sama.
Source code yang Anda tulis hanyalah "naskah". Agar komputer dapat memahaminya, compiler Go akan menerjemahkan seluruh kode tersebut menjadi bahasa mesin (machine code) yang kemudian disimpan dalam sebuah file executable atau binary.
Alur sederhananya dapat digambarkan seperti berikut.
Developer
│
▼
Source Code (.go)
│
▼
Go Compiler
│
▼
Binary Executable
│
▼
Program BerjalanKeunggulan Go adalah compiler-nya dirancang sangat cepat. Bahkan untuk project berukuran besar, waktu kompilasinya tetap relatif singkat dibandingkan beberapa bahasa lain.
Compiler adalah program yang bertugas menerjemahkan source code menjadi bahasa mesin sehingga dapat dijalankan oleh sistem operasi.
Saat Anda menulis kode berikut:
package main
import "fmt"
func main() {
fmt.Println("Hello, Golang!")
}Komputer sebenarnya tidak memahami sintaks tersebut.
Compiler Go akan membaca seluruh file .go, memeriksa apakah terdapat kesalahan sintaks, kemudian menghasilkan file executable yang dapat dijalankan oleh sistem operasi.
Karena proses inilah, aplikasi Go memiliki performa yang tinggi dan tidak memerlukan interpreter saat dijalankan.
Ketiga istilah ini sering dianggap sama, padahal memiliki tujuan yang berbeda.
Compile adalah proses menerjemahkan source code menjadi machine code.
Pada tahap ini compiler akan melakukan berbagai pemeriksaan, seperti validasi sintaks, pengecekan tipe data, hingga optimasi kode sebelum menghasilkan binary.
Compile merupakan inti dari seluruh proses pembangunan aplikasi Go.
Build merupakan proses menghasilkan file executable dari source code.
Perintah yang digunakan adalah:
go buildSetelah selesai, Anda akan melihat file baru pada direktori project.
belajar-go/
├── go.mod
├── main.go
└── belajar-goPada Windows, file tersebut biasanya memiliki ekstensi .exe.
Binary inilah yang nantinya didistribusikan ke server produksi.
Berbeda dengan go build, perintah berikut:
go run .tidak menghasilkan file executable permanen.
Go akan melakukan proses compile terlebih dahulu, membuat binary sementara (temporary binary), menjalankannya, kemudian menghapus binary tersebut setelah program selesai dieksekusi.
Ilustrasinya seperti berikut.
Source Code
│
▼
Compile
│
▼
Temporary Binary
│
▼
Program Berjalan
│
▼
Binary DihapusKarena itulah go run sangat cocok digunakan selama proses pengembangan.
Binary adalah hasil akhir dari proses kompilasi.
File ini sudah berisi seluruh instruksi yang dapat dijalankan langsung oleh sistem operasi.
Sebagai contoh, setelah menjalankan:
go buildAnda dapat menjalankan aplikasi tersebut tanpa perlu menginstal Go lagi.
Pada Linux atau macOS:
./belajar-goSedangkan pada Windows:
.\belajar-go.exeInilah salah satu alasan mengapa deployment aplikasi Go menjadi sangat sederhana. Anda cukup mengirimkan satu file binary ke server, kemudian menjalankannya.
Salah satu fitur unggulan Go adalah kemampuan melakukan cross compile, yaitu membuat executable untuk sistem operasi yang berbeda tanpa harus berpindah perangkat.
Sebagai contoh, Anda sedang menggunakan macOS tetapi ingin menghasilkan executable untuk Linux.
Cukup jalankan:
GOOS=linux GOARCH=amd64 go buildUntuk Windows:
GOOS=windows GOARCH=amd64 go buildSedangkan untuk macOS:
GOOS=darwin GOARCH=arm64 go buildSetelah proses selesai, Go akan menghasilkan executable sesuai target sistem operasi yang dipilih.
Kemampuan ini sangat membantu ketika proses deployment dilakukan ke server Linux sementara proses development dilakukan di Windows atau macOS.
Buat file main.go.
package main
import "fmt"
func main() {
fmt.Println("Belajar Compiler Go")
}Jalankan menggunakan:
go run .Program akan langsung dijalankan tanpa menghasilkan executable permanen.
Sekarang jalankan:
go buildPerhatikan bahwa akan muncul sebuah file baru pada folder project.
Jika Anda menggunakan Linux atau macOS:
belajar-goSedangkan pada Windows:
belajar-go.exeJalankan executable yang telah dihasilkan.
Linux atau macOS:
./belajar-goWindows:
.\belajar-go.exeOutputnya akan sama seperti ketika menggunakan go run, tetapi kali ini program dijalankan langsung dari binary yang telah dikompilasi.
Sebagai contoh, buat executable Windows dari Linux atau macOS.
GOOS=windows GOARCH=amd64 go build -o belajar-go.exeAtau buat executable Linux dari Windows.
GOOS=linux GOARCH=amd64 go build -o belajar-goPerhatikan bahwa Anda tidak perlu memiliki sistem operasi tujuan untuk menghasilkan binary tersebut.
Dalam proses pengembangan sehari-hari, developer biasanya menggunakan go run karena lebih praktis dan tidak meninggalkan file executable pada folder project. Namun ketika aplikasi akan dipublikasikan atau dideploy ke server, gunakan go build untuk menghasilkan binary yang stabil dan siap dijalankan.
Pada proses Continuous Integration (CI) maupun Continuous Deployment (CD), binary biasanya dibangun secara otomatis sebelum didistribusikan ke server. Pendekatan ini memastikan bahwa aplikasi yang dijalankan merupakan hasil kompilasi yang sama dengan yang telah melalui proses pengujian.
Jika aplikasi akan dijalankan pada sistem operasi yang berbeda, manfaatkan fitur cross compile daripada melakukan kompilasi ulang di server tujuan. Selain menghemat waktu, pendekatan ini juga membuat proses deployment menjadi lebih konsisten.
Tantangan 1
Buat sebuah program sederhana, kemudian jalankan menggunakan go run dan go build. Amati perbedaan file yang dihasilkan.
Tantangan 2
Lakukan cross compile untuk menghasilkan executable Windows atau Linux sesuai sistem operasi yang berbeda dari perangkat Anda, kemudian perhatikan nama file yang dihasilkan.
Tantangan 3
Gunakan opsi -o pada go build untuk menentukan nama executable yang Anda inginkan, misalnya server, api, atau belajar-go.
Pada artikel ini Anda telah mempelajari bagaimana compiler Go mengubah source code menjadi binary yang dapat dijalankan oleh sistem operasi. Anda juga memahami perbedaan antara proses compile, build, dan run, mengenal konsep binary, serta mencoba menghasilkan executable pertama menggunakan go build.
Selain itu, Anda telah mempelajari kemampuan cross compile yang menjadi salah satu keunggulan Go dalam proses deployment lintas platform. Dengan pemahaman ini, Anda kini mengetahui apa yang sebenarnya terjadi ketika menjalankan aplikasi Go, baik selama proses development maupun ketika aplikasi dipublikasikan ke lingkungan produksi.
Dokumentasi go build: https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies
Cross Compilation: https://go.dev/wiki/WindowsCrossCompiling
Go Command Documentation: https://go.dev/cmd/go/
go run dan go build?go run akan mengompilasi program ke binary sementara, menjalankannya, lalu menghapus binary tersebut. Sebaliknya, go build menghasilkan binary permanen yang dapat dijalankan kembali kapan saja.
Binary adalah file executable hasil kompilasi source code Go yang dapat dijalankan langsung oleh sistem operasi tanpa memerlukan instalasi Go.
Karena Go menghasilkan satu file binary yang telah berisi seluruh kode aplikasi, sehingga proses deployment cukup dilakukan dengan menyalin file tersebut ke server.
Cross compile adalah proses menghasilkan binary untuk sistem operasi atau arsitektur yang berbeda dari perangkat yang digunakan untuk melakukan kompilasi.
go build?Gunakan go build ketika Anda ingin mendistribusikan aplikasi, melakukan deployment ke server, membuat Docker image, atau menghasilkan executable yang akan digunakan oleh pengguna lain.
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