Topik ini menjelaskan cara membangun dan menjalankan Go dari kode sumbernya langsung. Untuk memasang Go lewat aplikasi, lihat Unduh dan pasang.
Pendahuluan
Go adalah sebuah proyek sumber terbuka, didistribusikan di bawah lisensi model-BSD. Dokumen ini menjelaskan cara mengambil kode sumber, membangunnya dalam mesin Anda, dan menjalankannya.
Umumnya pengguna tidak perlu melakukan hal ini, namun cukup memasang dari paket biner yang sudah dikompilasi seperti yang dijelaskan pada artikel Unduh dan pasang. Jika Anda ingin membantu membangun kode sumber yang ada pada paket-paket pra-kompilasi, silakan lanjutkan membaca artikel.
Ada dua compiler resmi Go: gc
dan gccgo
.
Dokumen ini fokus pada gc
, compiler dan perkakas Go.
Untuk informasi tentang cara bekerja dengan gccgo
, compiler tradisional
yang menggunakan GCC, lihat
Penyiapan dan penggunaan gccgo.
Compiler Go mendukung kumpulan instruksi berikut:
- amd64, 386
-
Kumpulan instruksi x86, 64 dan 32 bit.
- arm64, arm
-
Kumpulan instruksi ARM, 64-bit (AArch64) dan 32-bit.
- mips64, mips64le, mips, mipsle
-
Kumpulan instruksi MIPS, big- dan little-endian, 64- dan 32-bit.
- ppc64, ppc64le
-
Kumpulan instruksi 64-bit PowerPC, big- dan little-endian.
- riscv64
-
Kumpulan instruksi 64-bit RISC-V.
- s390x
-
IBM z/Architecture.
- wasm
Go compiler dapat ditujukan untuk sistem operasi AIX, Android, DragonFly BSD, FreeBSD, Illumos, Linux, macOS/iOS (Darwin), NetBSD, OpenBSD, Plan 9, Solaris, dan Windows (walaupun tidak semua sistem operasi mendukung semua arsitektur).
Daftar dukungan yang dianggap "kelas pertama" tersedia pada halaman wiki dukungan kelas pertama.
Seluruh kombinasi yang didukung ada dalam daftar variabel lingkungan di bawah.
Lihat halaman pemasangan untuk kebutuhan sistem keseluruhan. Batasan berikut berlaku untuk sistem yang dapat dibangun hanya dari sumber:
-
Untuk Linux pada PowerPC 64-bit, versi kernel minimum yaitu 2.6.37, artinya Go tidak mendukung CentOS 6 pada sistem ini.
Pasang compiler Go untuk bootstrap
Keseluruhan perkakas Go ditulis dalam Go.
Untuk membuat Go, Anda butuh memasang sebuah compiler Go.
Skrip yang melakukan pembangunan perkakas Go mencari perintah "go" di
dalam $PATH
, jadi bila Go telah terpasang di dalam sistem Anda dan ada dalam
$PATH
, Anda telah siap untuk membangun Go dari kode sumber.
Atau, Anda juga bisa menset $GOROOT_BOOTSTRAP
ke direktori pemasangan Go;
maka perintah $GOROOT_BOOTSTRAP/bin/go
akan menjadi compiler Go yang
digunakan untuk membangun perkakas dari awal.
Perkakas bootstrap dari rilis biner
Untuk menggunakan rilis biner sebagai perkakas bootstrap, lihat halaman unduhan atau gunakan paket distribusi Go lainnya.
Perkakas bootstrap dari sumber
Untuk membangun perkakas bootstrap dari kode sumber, gunakan cabang
(branch) git release-branch.go1.4
atau unduh
go1.4-bootstrap-20171003.tar.gz,
yang berisi kode sumber Go 1.4 dengan beberapa perbaikan yang menjaga supaya
perkakas dapat berjalan pada sistem operasi terbaru.
(Go 1.4 adalah distribusi terakhir yang ditulis menggunakan C.)
Setelah mengunduh dan membuka kode sumber Go 1.4, cd
ke subdirektori src
,
set CGO_ENABLED=0
pada lingkungan sistem, dan jalankan make.bash
(atau
make.bat
kalau di Windows).
Setelah kode sumber Go 1.4 diekstrak ke dalam direktori GOROOT_BOOTSTRAP,
pastikan supaya salinan repositori git ini selalu mengacu pada
release-branch.go1.4
.
Jangan gunakan salinan repositori ini untuk langkah pada
Mengambil repositori.
Perkakas bootstrap go1.4 harus bisa membaca kode sumber go1.4 yang
diasumsikan berada pada direktori GOROOT_BOOTSTRAP.
Perkakas bootstrap dari sumber kompilasi-silang (cross-compiled)
Untuk membuat perkakas bootstrap dari hasil kompilasi-silang, untuk sistem
yang Go 1.4 tidak punya targetnya (misalnya, linux/ppc64le
), pasang Go di
sistem yang berbeda kemudian jalankan
bootstrap.bash.
Misalnya, saat dijalankan sebagai berikut
$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash
bootstrap.bash
akan mengompilasi-silang perkakas untuk kombinasi
GOOS/GOARCH tersebut, yang tersimpan dalam
../../go-${GOOS}-${GOARCH}-bootstrap
.
Hasil kompilasi-silang dalam direktori tersebut dapat disalin ke mesin target
dan digunakan sebagai GOROOT_BOOTSTRAP
untuk membangun Go dari awal.
Perkakas bootstrap menggunakan gccgo
Untuk menggunakan gccgo sebagai perkakas bootstrap, Anda harus mengarahkan
$GOROOT_BOOTSTRAP/bin/go
supaya menunjuk ke gccgo 5.
Misalnya pada Ubuntu Vivid,
$ sudo apt-get install gccgo-5 $ sudo update-alternatives --set go /usr/bin/go-5 $ GOROOT_BOOTSTRAP=/usr ./make.bash
Pasang git, bila diperlukan
Untuk melanjutkan ke langkah selanjutnya, Anda harus memasang Git.
(Periksa apakah Anda sudah memiliki perintah git
sebelum melanjutkan.)
Jika Anda belum memasang Git, ikuti instruksi pada halaman mengunduh Git.
Pasang compiler C (opsional)
Untuk membuat Go dengan dukungan
cgo,
yang membolehkan Go program mengimpor pustaka C, compiler C seperti gcc
atau clang
haruslah terpasang terlebih dahulu.
Pasanglah compiler C sesuai dengan metode pemasangan di sistem Anda.
Untuk membangun tanpa cgo
, set variabel lingkungan CGO_ENABLED=0
sebelum
menjalankan all.bash
atau make.bash
.
Mengambil repositori
Pindahlah ke direktori di mana Anda akan memasang Go, dan pastikan direktori
goroot
belum ada.
Kemudian clone repositori dan pindah ke tag rilis terakhir (misalnya,
go1.15
),
$ git clone https://go.googlesource.com/go goroot $ cd goroot $ git checkout <tag>
Yang mana <tag>
adalah versi dari rilis.
Go akan terpasang di dalam direktori dibuat.
Misalnya, jika Go di clone di dalam $HOME/goroot
, maka perkakas Go akan
terpasang dalam $HOME/goroot/bin
.
Nama direktori clone tidaklah harus goroot
, bisa apa saja, tapi ingatlah
bila di clone ke $HOME/go
maka ia akan konflik dengan lokasi baku
$GOPATH
.
Lihat bagian tentang GOPATH di bawah.
Pindah ke cabang master (opsional)
Jika Anda berniat untuk mengubah kode sumber Go, dan
berkontribusi
ke proyek ini, maka pindahlah dari cabang rilis ke cabang master
(cabang
pengembangan).
Jika bukan demikian, lewati langkah ini.
$ git checkout master
Pasang Go
Untuk mulai membangun Go, jalankan
$ cd src $ ./all.bash
(bila menggunakan Windows gunakan all.bat
).
Jika semua berjalan dengan lancar, maka pada akhir kompilasi akan mencetak keluaran seperti berikut:
ALL TESTS PASSED --- Installed Go for linux/amd64 in /home/you/go. Installed commands in /home/you/go/bin. *** You need to add /home/you/go/bin to your $PATH. ***
Yang mana detail dari baris terakhir bergantung pada sistem operasi, arsitektur, dan direktori yang digunakan selama pemasangan.
Untuk informasi lebih lanjut tentang cara mengontrol pembangunan, lihat
diskusi tentang variabel lingkungan di bawah.
Skrip all.bash
(atau all.bat
) menjalankan beberapa pengujian yang penting
untuk Go, yang membutuhkan waktu lebih daripada hanya membangun perkakas Go
saja.
Jika Anda tidak berniat menjalankan pengujian cukup jalankan make.bash
(atau
make.bat
) saja.
Menguji instalasi Anda
Periksa apakah Go terpasang dengan benar dengan membuat sebuah program sederhana.
Buatlah sebuah berkas bernama hello.go
dan salinlah kode berikut:
package main import "fmt" func main() { fmt.Printf("hello, world\n") }
kemudian jalankan dengan perkakas go
:
$ go run hello.go hello, world
Jika Anda melihat keluaran hello, world
maka Go telah terpasang dengan
benar.
Atur lingkungan kerja Anda
Anda hampir selesai. Anda hanya perlu sedikit pengaturan.
Dokumen Bagaimana menulis kode Go menyediakan instruksi pengaturan yang penting untuk menggunakan perkakas Go.
Pasang perkakas tambahan
Sumber kode untuk beberapa perkakas Go tambahan (termasuk
godoc)
disimpan di
repositori tools.
Untuk memasang salah satu perkakas tersebut (misalnya godoc
):
$ go get golang.org/x/tools/cmd/godoc
Untuk memasang perkakas tambahan tersebut, perintah go get
membutuhkan
Git terpasang di lokal.
Anda juga harus memiliki sebuah ruang kerja (GOPATH); lihatlah Bagaimana menulis kode Go untuk lebih detail.
Komunitas
Sumber komunitas biasa seperti kanal #go-nuts
di server IRC
Freenode
dan milis
Go Nuts
memiliki beberapa orang yang aktif yang dapat membantu masalah Anda selama
pemasangan.
Bagi yang ingin selalu terbarui, ada milis lain yaitu
golang-checkins
yang berisi pesan tentang setiap commit yang masuk ke repositori Go.
Isu-isu tentang Go dapat dilaporkan ke pelacak isu Go.
Mengikuti rilis
Rilis terbaru diumumkan di milis
golang-announce.
Setiap pengumuman mencantumkan rilis tag, misalnya go1.9
.
Untuk memperbarui kode sumber ke rilis yang terbaru, Anda dapat menjalankan:
$ cd go/src $ git fetch $ git checkout <tag> $ ./all.bash
Yang mana <tag>
adalah versi dari rilis yang terbaru.
Opsi variabel lingkungan
Lingkungan kompilasi Go dapat diatur lewat variabel sistem. Tidak ada variabel yang perlu di-set untuk pembangunan, namun Anda mungkin butuh menset beberapa variabel untuk menimpa pengaturan bakunya.
- $GOROOT
-
Direktori hasil pemasangan Go, biasanya
$HOME/go1.X
. Isi dari variabel ini diset saat kompilasi menjadi direktori di manaall.bash
dijalankan. Anda tidak perlu menset variabel ini kecuali Anda ingin berpindah-pindah dari salinan repositori yang berbeda-beda di sistem lokal Anda. - $GOROOT_FINAL
-
Lokasi di mana perkakas dan skrip akan terpasang. Jika variabel ini tidak diset, maka nilainya sama dengan $GOROOT. Jika Anda membangun Go di lokasi tertentu (misalnya
$HOME/src/go
) namun ingin terpasang di lokasi lain yang berbeda (misalnya/usr
), maka Anda dapat menset variabel sistem ini sebelum membangun dari kode sumber. - $GOPATH
-
Direktori di mana proyek-proyek Go selain distribusi perkakas Go akan terpasang. Misalnya,
golang.org/x/tools
akan disalin ke$GOPATH/src/golang.org/x/tools
. Program-program selain perkakas dari distribusi Go terpasang di$GOPATH/bin
(atau$GOBIN
, bila diset). Modul-modul diunduh dan disimpan dalam tembolok di$GOPATH/pkg/mod
.Lokasi baku dari
$GOPATH
adalah$HOME/go
, dan biasanya tidak perlu menset variabel ini secara eksplisit. Namun, bila Anda menyalin kode sumber Go ke$HOME/go
, Anda harus menset$GOPATH
ke lokasi yang lain untuk menghindari konflik. - $GOBIN
-
Direktori di mana program-program selain perkakas distribusi Go akan dipasang oleh perintah go. Misalnya, perintah
go get golang.org/x/tools/cmd/godoc
akan mengunduh, membangun, dan memasang programgodoc
di dalam direktori$GOBIN
. Bila kosong,$GOBIN
diset ke$GOPATH/bin
(atau$HOME/go/bin
bila$GOPATH
tidak diset). Bila diset, Anda harus menambahkan direktori ini ke dalam variabel sistem$PATH
Anda supaya dapat menggunakan program-program yang terpasang.Ingatlah bahwa program distribusi Go terpasang di
$GOROOT/bin
(untuk program Go yang dipanggil langsung) atau$GOTOOLDIR
(untuk program yang dipanggil oleh perkakas Go; nilai bakunya yaitu$GOROOT/pkg/$GOOS_$GOARCH
) bukan$GOBIN
. - $GOOS dan $GOARCH
-
Nama dari target sistem operasi dan arsitektur. Nilai variabel ini diset ke
$GOHOSTOS
dan$GOHOSTARCH
(dijelaskan di bawah).Pilihan untuk $GOOS adalah
android
,darwin
(macOS,iOS),dragonfly
,freebsd
,illumos
,js
,linux
,netbsd
,openbsd
,plan9
,solaris
, atauwindows
.Pilihan untuk $GOARCH adalah
amd64
(64-bit x86),386
(32-bit x86),arm
(32-bit ARM),arm64
(64-bit ARM),ppc64le
(PowerPC 64-bit, little-endian),ppc64
(PowerPC 64-bit, big-endian),mips64le
(MIPS 64-bit, little-endian),mips64
(MIPS 64-bit, big-endian),mipsle
(MIPS 32-bit, little-endian),mips
(MIPS 32-bit, big-endian),s390x
(IBM System z 64-bit, big-endian), atauwasm
(WebAssembly 32-bit).Kombinasi valid dari $GOOS dan $GOARCH adalah:
$GOOS
$GOARCH
aix
ppc64
android
386
android
amd64
android
arm
android
arm64
darwin
amd64
darwin
arm64
dragonfly
amd64
freebsd
386
freebsd
amd64
freebsd
arm
illumos
amd64
js
wasm
linux
386
linux
amd64
linux
arm
linux
arm64
linux
ppc64
linux
ppc64le
linux
mips
linux
mipsle
linux
mips64
linux
mips64le
linux
riscv64
linux
s390x
netbsd
386
netbsd
amd64
netbsd
arm
openbsd
386
openbsd
amd64
openbsd
arm
openbsd
arm64
plan9
386
plan9
amd64
plan9
arm
solaris
amd64
windows
386
windows
amd64
- $GOHOSTOS dan $GOHOSTARCH
-
Berisi nama dari sistem operasi dan arsitektur dari host. Nilai bakunya yaitu sistem operasi dan arsitektur lokal.
Pilihan nilai yang valid sama dengan $GOOS dan $GOARCH, tercantum di atas. Nilai yang diset harus kompatibel dengan sistem lokal. Misalnya, Anda tidak bisa menset $GOHOSTARCH ke
arm
bila sistem lokal Anda adalahx86
. - $GO386 (hanya untuk sistem 386)
-
Nilai bakunya otomatis terdeteksi jika dibangun pada
386
atauamd64
, selain itu diset ke387
.Variabel ini mengontrol kode yang dibangkitkan oleh
gc
untuk menggunakan unit floating-point 387 (bila diset ke387
) atau instruksi SSE2 (bila diset kesse2
) untuk komputasi floating-point.-
GO386=387: gunakan x87 untuk operasi floating-point; seharusnya didukung oleh semua cip x86 (Pentium MMX atau yang terbaru).
-
GO386=sse2: gunakan operasi floating-point SSE2; memiliki performansi lebih baik dari 387, namun hanya tersedia pada Pentium 4/Opteron/Athlon 64 atau yang terbaru.
-
- $GOARM (untuk
arm
only) -
Nilai bakunya otomatis dideteksi pada prosesor target, selain itu akan diset ke
6
.Variabel ini menset versi floating-point ko-prosesor pada arsitektur ARM. Jika Anda mengompilasi pada sistem target tersebut, nilainya akan otomatis terdeteksi.
-
GOARM=5: gunakan floating-point tingkat perangkat lunak; bila CPU tidak memiliki ko-prosesor VFP
-
GOARM=6: gunakan VFPv1; nilai baku saat kompilasi-silang; biasanya untuk ARM11 atau yang terbaru (VFPv2 atau yang terbaru juga didukung)
-
GOARM=7: gunakan VFPv3; biasanya untuk Cortex-A
Jika ragu, kosongkan variabel ini, dan set hanya saat menjalankan program Go. Halaman wiki GoArm berisi detail lebih lanjut tentang dukungan ARM pada Go.
-
- $GOMIPS (untuk
mips
danmipsle
), $GOMIPS64 (untukmips64
ataumips64le
) -
Variabel ini menset apakah menggunakan instruksi floating-point atau tidak. Set ke “hardfloat” untuk menggunakan instruksi floating-point (nilai bakunya). Set ke “softfloat” untuk menggunakan soft floating-point.
- $GOPPC64 (hanya untuk
ppc64
atauppc64le
) -
Variabel ini menset level prosesor (yaitu versi Instruction Set Architecture) dari target compiler. Nilai bakunya yaitu
power8
.-
GOPPC64=power8: gunakan instruksi ISA v2.07
-
GOPPC64=power9: gunakan instruksi ISA v3.00
-
- $GOWASM (hanya untuk
wasm
) -
Variabel ini berisi daftar fitur-fitur eksperimental WebAssembly yang hasil pembangunan program WebAssembly dapat gunakan. Nilai bakunya yaitu kosong (tidak ada fitur eksperimental yang digunakan).
-
GOWASM=satconv: gunakan fitur konversi float-to-int
-
GOWASM=signext: gunakan fitur operator sign-extension
-
Ingatlah bahwa $GOOS dan $GOARCH mengidentifikasi target lingkungan,
bukan lingkungan yang sekarang sedang berjalan.
Efeknya, Anda sebenarnya selalu melakukan kompilasi-silang.
Secara arsitektur, yang kita maksud dengan target yaitu sistem di mana hasil
kompilasi program akan berjalan: sistem x86-64 yang berjalan dalam sistem
operasi 32-bit harus menset GOARCH ke 386, bukan amd64
.
Jika Anda menimpa nilai baku dari variabel-variabel lingkungan di atas, set
juga mereka dalam profil shell Anda ($HOME/.bashrc
, $HOME/.profile
, atau
sejenisnya).
Pengaturan tersebut bentuknya seperti berikut,
export GOARCH=amd64 export GOOS=linux
walau sebenarnya tidak ada variabel yang perlu diset untuk membangun, memasang, dan mengembangkan kode sumber Go.