Kecepatan go run memang pas untuk sesi belajar dan pengembangan, tetapi pengguna akhir program kita tidak selalu memiliki Go di komputernya. Untuk kebutuhan itu Go menyediakan go build: perintah yang mengompilasi program menjadi satu file binary yang berdiri sendiri. Binary hasil build dapat dikirim ke server, disematkan pada container, atau dibagikan ke rekan kerja tanpa membawa kode sumber maupun toolchain. Pada chapter ini kita bangun binary dari halo.go, jalankan hasilnya, lalu lihat sekilas kemampuan cross-compile.
Membangun Binary Pertama #
Berkas halo.go pada folder chapter ini berisi program sapaan yang siap dikompilasi:
package main
import "fmt"
func main() {
fmt.Println("Halo dari program yang dikompilasi!")
}Bangun binary dengan opsi -o yang menentukan nama file hasil kompilasi, lalu periksa hasilnya:
go build -o halo halo.go
ls -lh haloOutput yang Dihasilkan:
-rwxrwxr-x 1 z z 2.3M Oct 13 07:28 haloMari kita telaah baris demi baris program halo.go di atas:
- Baris 1 (
package main): menandai berkas sebagai program yang dapat dieksekusi, syarat yang dicarigo build. - Baris 3 (
import "fmt"): memuat packagefmtuntuk fungsi pencetakan. - Baris 5 (
func main() {): titik masuk program yang menjadi awal eksekusi binary. - Baris 6 (
fmt.Println(...)): statement yang mencetak sapaan saat binary dijalankan.
Opsi -o halo memberi nama file hasil kompilasi sesuai keinginan kita. Tanpa opsi tersebut, go build memakai nama lain yang akan kita lihat sebentar lagi. Ukuran file sekitar 2-3 MB untuk program sekecil ini memang terasa besar, tetapi wajar: binary Go secara default menyertakan runtime beserta seluruh kode standard library yang dipakai, sehingga binary tidak bergantung pada library terpisah di sistem pengguna.
Menjalankan Binary #
Binary hasil kompilasi adalah file executable biasa. Kita menjalankannya langsung dengan awalan ./ karena file tersebut berada di direktori aktif:
./haloOutput yang Dihasilkan:
Halo dari program yang dikompilasi!Output yang sama dengan go run halo.go kini dihasilkan tanpa melibatkan perintah go sama sekali. Tidak ada kompilasi yang terjadi saat binary dijalankan; seluruh pekerjaan build sudah selesai pada saat go build tadi. Bedanya dengan go run, eksekusi ./halo melompati pemeriksaan cache dan seluruh tahapan toolchain, sehingga waktu yang terpakai murni waktu eksekusi program. File halo inilah yang kita salin ke server atau kirim ke pengguna bila ingin mendistribusikan program.
go build Tanpa Opsi -o #
go build tanpa opsi -o dan tanpa nama berkas akan mengompilasi package di direktori aktif dan menamai binary mengikuti nama foldernya:
go build
ls -lhOutput yang Dihasilkan:
total 4.5M
-rwxrwxr-x 1 z z 2.3M Oct 13 07:28 halo
-rw-rw-r-- 1 z z 96 Oct 13 07:15 halo.go
-rw-rw-r-- 1 z z 5.3K Oct 13 07:27 index.md
-rwxrwxr-x 1 z z 2.3M Oct 13 07:28 kompilasi-programSistem operasi juga memengaruhi penamaan: di Windows, binary otomatis diberi akhiran .exe seperti halo.exe walaupun kita tidak menuliskannya. Perintah di atas memakai package di direktori aktif, sehingga berlaku catatan module yang sama dengan go run .: folder tanpa go.mod akan ditolak dengan pesan go.mod file not found.
Cross-Compile Secara Kilas #
Kompiler Go dapat membangun binary untuk sistem operasi dan arsitektur lain dari komputer yang sama. Cukup atur variabel lingkungan GOOS dan GOARCH saat memanggil go build:
GOOS=windows GOARCH=amd64 go build -o halo.exe halo.go
ls -lh halo.exeOutput yang Dihasilkan:
-rwxrwxr-x 1 z z 2.4M Oct 13 07:28 halo.exeFile halo.exe di atas dibangun untuk Windows 64-bit sehingga tidak dapat dijalankan di Linux; formatnya PE executable, bukan ELF seperti binary Linux. Kombinasi GOOS dan GOARCH yang umum antara lain linux/amd64, darwin/arm64 untuk Mac modern, dan windows/amd64. Daftar lengkap serta praktik distribusinya dibahas di chapter Cross Compilation
.
Dari go run yang cepat hingga go build yang menghasilkan binary siap distribusi, perjalanan kita kini lengkap. Namun dunia nyata tidak selalu berjalan mulus: compiler kerap menolak kode kita dengan pesan yang belum tentu langsung terbaca. Keterampilan terakhir section ini adalah membedah pesan error compiler, dan itulah fokus chapter penutup kita.
Referensi #
- Dokumentasi perintah go
— rujukan resmi opsi dan perilaku
go build. - Tutorial: Get started with Go — tutorial resmi membangun binary pertama.
- Effective Go — panduan resmi gaya dan praktik Go.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
halo.go
Unduh berkaspackage main
import "fmt"
func main() {
fmt.Println("Halo dari program yang dikompilasi!")
}