diff options
| author | Shulhan <m.shulhan@gmail.com> | 2020-04-26 20:30:58 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2020-04-26 20:31:05 +0700 |
| commit | ae87a7a3babc5a7194d630a02f1e79a71d93a647 (patch) | |
| tree | d598230e31050986c877785bb1be50aa69222a8d /_content/cmd/go/index.adoc | |
| parent | 4ff208d604f34d0579399dd289a9a60e19c9a2ab (diff) | |
| download | golang-id-web-ae87a7a3babc5a7194d630a02f1e79a71d93a647.tar.xz | |
all: add underscore prefix to non Go directories
This is to prevent Go tools process any directories that start with
underscore.
Diffstat (limited to '_content/cmd/go/index.adoc')
| -rw-r--r-- | _content/cmd/go/index.adoc | 1129 |
1 files changed, 1129 insertions, 0 deletions
diff --git a/_content/cmd/go/index.adoc b/_content/cmd/go/index.adoc new file mode 100644 index 0000000..22ccd62 --- /dev/null +++ b/_content/cmd/go/index.adoc @@ -0,0 +1,1129 @@ += Perintah go +:toc: + +Go adalah sebuah perkakas untuk mengatur sumber kode Go. + +Penggunaan: + +---- +go <perintah> [argumen] +---- + +Perintah-perintahnya adalah: + +---- +bug jalankan pelaporan bug +build kompilasi paket-paket dan dependensi +clean hapus berkas-berkas objek dan cache +doc tampilkan dokumentasi dari paket atau simbol +env cetak informasi lingkungan dari Go +fix ubah paket untuk menggunakan API yang baru +fmt gofmt (format ulang) sumber-sumber paket +generate buat berkas Go dengan memproses sumber +get tambah dan pasang dependensi ke modul yang sekarang +install kompilasi dan pasang paket dan dependensi +list cetak daftar paket atau modul +mod pemeliharaan modul +run kompilasi dan jalankan program Go +test tes paket-paket +tool jalankan perkakas go tertentu +version cetak versi Go +vet laporkan kemungkinan kesalahan dalam paket-paket +---- + +Gunakan "go help <perintah>" untuk informasi tentang perintah. + +Beberapa topik bantuan tambahan: + +---- +buildmode mode pembangunan +c pemanggilan antara Go dan C +cache cache pada pembangunan dan tes +environment variabel-variabel lingkungan +filetype tipe-tipe berkas +go.mod berkas go.mod +gopath variabel lingkungan GOPATH +gopath-get legasi GOPATH menggunakan go get +goproxy protokol proxy pada modul +importpath sintaksis untuk path impor +modules modul, versi modul, dan banyak lagi +module-get go get dengan menggunakan modul +module-auth autentikasi modul menggunakan go.sum +module-private konfigurasi modul untuk modul yang tidak publik +packages daftar dan pola paket +testflag opsi-opsi untuk tes +testfunc fungsi-fungsi untuk tes +---- + +Gunakan "go help <topik>" untuk informasi lanjut tentang topik tersebut. + +[#hdr-Start_a_bug_report] +== Jalankan pelaporan bug + +Penggunaan: + +---- +go bug +---- + +Perintah `bug` membuka peramban dan menjalankan laporan _bug_ yang baru. +Laporan tersebut mengikutkan informasi sistem. + + +[#hdr-Compile_packages_and_dependencies] +== Kompilasi paket-paket dan dependensi + +Penggunaan: + +---- +go build [-o output] [-i] [flag build] [paket] +---- + +Perintah `build` mengompilasi paket-paket berdasarkan nama dari path import, +bersama dengan dependensinya, namun tidak memasang hasilnya. + +Jika argumennya adalah daftar berkas .go dari sebuah direktori, maka `build` +menganggapnya sebagai daftar berkas sumber dari paket yang sama. + +Saat mengompilasi paket, `build` mengindahkan berkas yang berakhiran +`_test.go`. + +Saat mengompilasi paket main, `build` menulis hasil program ke sebuah berkas +yang namanya diambil dari berkas sumber pertama (`go build ed.go rx.go` +menulis `ed` atau `ed.exe`) atau direktori sumber kode +(`go build unix/sam` menulis `sam` atau `sam.exe`). +Akhiran '.exe' ditambahkan bila menulis program untuk Windows. + +Saat mengompilasi beberapa paket atau paket yang bukan `main`, `build` +mengompilasi paket-paket tersebut namun mengindahkan objek hasilnya, +cara ini untuk memeriksa bahwa paket dapat dibangun. + +Opsi "-o" memaksa `build` untuk menulis hasil program atau objek dengan nama +atau direktori yang diberikan, bukan dengan perilaku seperti yang dijelaskan +pada dua paragraf sebelumnya. +Jika nama keluaran adalah direktori yang sudah ada, maka hasil program akan +ditulis di dalam direktori tersebut. + +Opsi "-i" memasang paket-paket dependensi dari target. + +Opsi-opsi dari `build` berikut dapat digunakan pada perintah `clean`, `get`, +`install`, `list`, `run`, dan `test`: + +---- +-a + buat ulang semua paket bahkan yang sudah terbarukan. +-n + cetak perintah-perintah tetapi jangan jalankan. +-p n + jumlah program, seperti perintah build atau tes, yang dapat berjalan + secara paralel. + Nilai baku dari n yaitu jumlah CPU yang tersedia. +-race + izinkan deteksi data race. + Hanya didukung pada linux/amd64, freebsd/amd64, darwin/amd64, + windows/amd64, linux/ppc64le, dan linux/arm64 (hanya untuk 48-bit + VMA). +-msan + izinkan operasi dengan pembersih memory. + Hanya didukung pada linux/amd64, linux/arm64 dan hanya lewat + Clang/LLVM sebagai compiler C. + Pada linux/arm64, mode build "pie" akan digunakan. +-v + cetak nama-nama paket saat mereka dikompilasi. +-work + cetak nama dari direktori sementara dan jangan hapus saat selesai. +-x + cetak perintah-perintah. + +-asmflags '[pattern=]arg list' + argumen yang dikirim ke setiap pemanggilan `go tool asm`. +-buildmode mode + mode pembangunan yang akan digunakan. lihat 'go help buildmode' untuk + lebih lanjut. +-compiler name + nama compiler yang akan digunakan, seperti dalam runtime.Compiler + (gccgo atau gc). +-gccgoflags '[pattern=]arg list' + argumen yang akan dikirim setiap pemanggilan compiler/linker gccgo. +-gcflags '[pattern=]arg list' + argumen yang akan dikirim setiap pemanggilan "go tool compile" +-installsuffix suffix + Sufiks yang digunakan sebagai nama direktori pemasangan paket, dengan + tujuan untuk menjaga keluaran terpisah dengan pembangunan biasa. + Jika menggunakan opsi -race, maka akhiran pada pemasangan secara + otomatis di set ke race atau, jika di set secara eksplisit, akan + ditambahkan _race. + Hal yang sama juga berlaku pada opsi -msan. + Menggunakan opsi -buildmode yang membutuhkan opsi-opsi yang tidak + biasa akan mendapatkan efek yang sama. +-ldflags '[pattern=]arg list' + argumen yang akan dikirim ke setiap pemanggilan "go tool link" +-linkshared + link dengan pustaka yang dibuat sebelumnya dengan -buildmode=shared. +-mod mode + mode pengunduhan modul yang digunakan: readonly atau vendor. + Lihat 'go help modules' untuk lebih lanjut. +-modcacherw + direktori yang baru dibuat dalam modul _cache_ akan di set read-write + bukan read-only +.-pkgdir dir + pasang dan muat semua paket dari "dir" sebagai ganti dari lokasi + biasa. + Contohnya, saat membangun dengan konfigurasi non-standar, gunakan + -pkgdir untuk menghasilkan paket di lokasi yang berbeda. +-tags tag,list + daftar tag dari build yang terpisah dengan koma yang akan dipenuhi + selama pembangunan. + Untuk informasi lebih lanjut tentang build tag, lihat deskripsi dari + batasan-batasan build dalam dokumentasi untuk paket go/build. + (Versi dahulu dari Go menggunakan daftar yang terpisah dengan spasi, + dan bentuk tersebut sudah tidak digunakan lagi namun masih tetap + dikenali. +-trimpath + hapus semua path-path sistem dari hasil program. + Nama berkas yang tercatat akan dimulai dengan "go" (untuk pustaka + standar), atau module path@version (bila menggunakan modul), atau path + import biasa (bila menggunakan GOPATH). +-toolexec 'cmd args' + program yang digunakan untuk memanggil program toolchain seperti vet + dan asm. + Misalnya, alih-alih menjalankan asm, perintah go akan menjalankan + 'cmd args /path/to/asm <argumen untuk asm>'. +---- + +Opsi -asmflags, -gccgoflags, -gcflags, dan -ldflags menerima daftar argumen +yang dipisahkan oleh spasi untuk dikirim ke perkakas yang dijalankan +dibelakangnya selama pembangunan. +Untuk menambah spasi dalam elemen dalam daftar tersebut, kurung dengan tanda +kutip tunggal atau ganda. +Daftar argumen bisa diawali dengan sebuah pola paket dan tanda sama dengan +("="), yang membatasi penggunaan dari daftar argumen tersebut ke pembangunan +paket-paket yang cocok dengan pola (lihat 'go help packages' untuk deskripsi +dari pola paket). +Tanpa pola, daftar argumen hanya berlaku untuk paket yang diberikan pada +perintah baris. +Opsi-opsi tersebut bisa berulang dengan pola yang berbeda dengan tujuan untuk +menentukan argumen yang berbeda untuk sekumpulan paket. +Jika sebuah pola pencocokan paket diberikan dalam beberapa opsi, kecocokan +yang terakhir akan digunakan. +Sebagai contohnya, 'go build -gcflags=-S fmt' mencetak _disassembly_ hanya +untuk paket fmt, sementara 'go build -gcflags=all=-S fmt' mencetak +_disassembly_ untuk fmt dan semua dependensinya. + +Untuk lebih tahu tentang cara menspesifikasikan paket, lihat 'go help +packages'. +Untuk mengetahui lebih lanjut tentang di mana paket dan program dipasang, +jalankan 'go help gopath'. +Untuk mengetahui lebih lanjut tentang pemanggilan antara Go dan C/C++, +jalankan 'go help c'. + +Catatan: Perintah `build` mengikuti beberapa konvensi seperti yang dijelaskan +oleh 'go help gopath'. +Tidak semua proyek dapat mengikuti konvensi tersebut. +Pemasangan yang memiliki konvensinya sendiri atau yang menggunakan sistem +pembangunan perangkat lunak yang terpisah bisa memilih untuk menggunakan +pemanggilan tingkat-rendah seperti 'go tool compile' dan 'go tool link' untuk +menghindari beberapa beban dan rancangan dari perkakas build. + +Lihat juga: go install, go get, go clean. + + +[#hdr-Remove_object_files_and_cached_files] +== Hapus berkas-berkas objek dan _cache_ + +Penggunaan: + +---- +go clean [clean flags] [build flags] [packages] +---- + +Perintah `clean` menghapus berkas objek dari direktori sumber paket. +Perintah go menulis objek dalam sebuah direktori sementara, sehingga +'go clean' biasanya berguna untuk berkas objek sisa dari perkakas lain atau +dari pemanggilan manual dari go build. + +Jika argumen sebuah paket diberikan atau opsi -i atau -r di set, `clean` +menghapus berkas-berkas berikut dari setiap direktori sumber yang +berkorespondensi dengan path impor: + +---- +_obj/ direktori objek yang lama, sisa dari Makefiles +_test/ direktori tes yang lama, sisa dari Makefiles +_testmain.go berkas gotest lama, sisa dari Makefiles +test.out log tes lama, sisa dari Makefiles +build.out log tes lama, sisa dari Makefiles +*.[568ao] berkas object, sisa dari Makefiles + +DIR(.exe) dari go build +DIR.test(.exe) dari go test -c +MAINFILE(.exe) dari go build MAINFILE.go +*.so dari SWIG +---- + +Dalam daftar tersebut, DIR merepresentasikan elemen path terakhir dari +direktori, dan MAINFILE adalah nama dasar dari sumber kode Go dalam direktori +tersebut yang tidak diikutkan saat membangun paket. + +Opsi -i membuat perintah `clean` untuk menghapus arsip dan binary yang +terpasang (yang dibuat oleh 'go install'). + +Opsi -n membuat perintah `clean` untuk mencetak perintah penghapusan yang +akan dieksekusi, namun tidak menjalankannya. + +Opsi -r membuat perintah `clean` menerapkan secara rekursif ke semua +dependensi dari paket dari path impor. + +Opsi -x membuat perintah `clean` mencetak perintah penghapus saat ia +dieksekusi. + +Opsi -cache membuat `clean` menghapus semua _cache_ dari go build. + +Opsi -testcache menyuruh supaya `clean` untuk kedaluwarsa semua hasil tes +dalam _cache_ go build. + +Opsi -modcache menyebabkan `clean` menghapus semua _cache_ unduhan modul +termasuk sumber kode dari dependensi yang memiliki versi. + +Untuk lebih lanjut tentang opsi build, lihat 'go help build'. + +Untuk lebih lanjut tentang menentukan paket, lihat 'go help packages'. + + +[#hdr-Show_documentation_for_package_or_symbol] +== Tampilkan dokumentasi dari paket atau simbol + +Penggunaan: + +---- +go doc [-u] [-c] [package|[package.]symbol[.methodOrField]] +---- + +Perintah `doc` mencetak komentar dokumentasi yang berasosiasi dengan item yang +diidentifikasi lewat argumen-argumen (sebuah paket, const, func, type, var, +method, atau field dari struct) diikuti dengan sebuah ringkasan satu-baris +dari setiap item tingkat-pertama "di bawah" item tersebut (deklarasi +tingkat-paket untuk sebuah paket, method untuk sebuah tipe, dan seterusnya.). + +Perintah `doc` menerima argumen kosong, satu, atau dua. + +Bila argumen tidak ada, yaitu, bila dijalankan seperti + +---- +go doc +---- + +ia akan mencetak dokumentasi paket dalam direktori yang sekarang. +Jika paket adalah sebuah program (package main), simbol-simbol yang diekspor +oleh paket tidak ditampilkan kecuali bila opsi -cmd diberikan. + +Bila dijalankan dengan satu argumen, maka argumen tersebut dianggap sebagai +representasi mirip sintaksis Go dari item yang didokumentasikan. +Apa yang argumen pilih bergantung pada apa yang dipasang dalam GOROOT dan +GOPATH, sebagaimana juga bentuk dari argumen, yang secara semantik adalah satu +dari hal berikut: + +---- +go doc <pkg> +go doc <sym>[.<methodOrField>] +go doc [<pkg>.]<sym>[.<methodOrField>] +go doc [<pkg>.][<sym>.]<methodOrField> +---- + +Item pertama dalam daftar di atas yang sesuai dengan argumen akan dicetak +dokumentasinya. +(Lihat contoh di bawah). +Namun jika argumen dimulai dengan huruf besar maka diasumsikan sebagai simbol +atau method dari direktori yang sekarang. + +Untuk paket, urutan pencarian ditentukan secara leksikal dengan cara +_breadth-first order_. +Yaitu, paket yang ditampilkan adalah yang cocok dengan pencarian dan terdekat +dengan root dan yang pertama secara leksikal di tingkat hirarkinya. +Pohon GOROOT selalu dicari pertama kali sebelum GOPATH. + +Jika tidak ada paket yang diberikan atau cocok, maka paket di direktori +sekarang yang dipilih, sehingga "go doc Foo" memperlihatkan dokumentasi untuk +simbol Foo dalam paket yang sekarang. + +Path dari paket bisa secara penuh atau cukup sufiks dari path saja. +Mekanisme umum dari go tool tidak berlaku: elemen path paket seperti . dan ... +tidak diimplementasikan oleh `go doc`. + +Bila dijalankan dengan dua argumen, yang pertama haruslah path penuh dari +paket (tidak hanya sufiks saja), dan yang kedua adalah simbol, atau simbol +dengan method atau field struct. +Hal ini sama dengan sintaksis yang diterima oleh godoc: + +---- +go doc <pkg> <sym>[.<methodOrField>] +---- + +Dalam semua bentuk, saat mencocokan simbol, huruf kecil dalam argumen +menyesuaikan dengan huruf kecil atau besar namun huruf besar dicocokan persis. +Hal ini berarti akan ada beberapa kecocokan dari argumen dengan huruf kecil +dalam sebuah paket jika simbol yang berbeda memiliki huruf yang berbeda. +Jika hal ini terjadi, dokumentasi untuk semua kecocokan dicetak. + +Contoh: + +---- +go doc + Tampilkan dokumentasi dari paket yang sekarang. +go doc Foo + Tampilkan dokumentasi dari Foo dalam paket sekarang. + (Foo dimulai dengan huruf besar sehingga tidak sesuai dengan path + paket.) +go doc encoding/json + Tampilkan dokumentasi dari paket encoding/json. +go doc json + Cara cepat untuk encoding/json. +go doc json.Number (or go doc json.number) + Tampilkan dokumentasi dan ringkasan method untuk json.Number. +go doc json.Number.Int64 (or go doc json.number.int64) + Tampilkan dokumentasi untuk method json.Number Int64. +go doc cmd/doc + Tampilkan dokumentasi paket untuk perintah doc. +go doc -cmd cmd/doc + Tampilkan dokumentasi dan simbol-simbol yang diekspor dalam perintah + doc. +go doc template.new + Tampilkan dokumentasi untuk fungsi html/template New. + (html/template secara leksikal sebelum text/template). +go doc text/template.new # Satu argumen + Tampilkan dokumentasi untuk fungsi text/template New. +go doc text/template new # Dua argumen + Tampilkan dokumentasi untuk fungsi text/template New. + +Paling tidak, pemanggilan berikut mencetak dokumentasi untuk method +json.Decoder Decode: + +go doc json.Decoder.Decode +go doc json.decoder.decode +go doc json.decode +cd go/src/encoding/json; go doc decode +---- + +Opsi-opsi: + +---- +-all + Tampilkan semua dokumentasi dari paket. +-c + Perhatikan huruf besar/kecil saat mencari simbol. +-cmd + Perlakukan sebuah perintah (paket main) seperti paket biasa. + Sebaliknya simbol-simbol yang diekspor paket main disembunyikan saat + menampilkan dokumentasi paket tingkat-atas. +-short + Tampilkan satu-baris representasi untuk setiap simbol. +-src + Tampilkan keseluruhan sumber kode dari simbol. Cara ini + memperlihatkan seluruh sumber Go dari deklarasi dan definisi, seperti + sebuah definisi fungsi (termasuk badannya), deklarasi tipe atau blok + const. Keluarannya bisa mengikutkan rincian yang tidak diekspor. +-u + Tampilkan dokumentasi untuk simbol, method, field yang tidak diekspor + dan yang diekspor. +---- + + +[#hdr-Print_Go_environment_information] +== Cetak informasi lingkungan dari Go + +Penggunaan: + +---- +go env [-json] [-u] [-w] [var ...] +---- + +Perintah `env` mencetak informasi lingkungan Go. + +Secara baku env mencetak informasi sebagai skrip _shell_ (pada Windows, sebuah +berkas _batch_). +Jika satu atau lebih variabel diberikan sebagai argumen, env mencetak nilai +dari setiap variabel per baris. + +Opsi -json mencetak nilai variabel dalam format JSON. + +Opsi -u membutuhkan satu atau lebih argumen dan akan menghapus pengaturan baku +dari variabel lingkungan tersebut, jika sebelumnya telah diset dengan +'go env -w'. + +Opsi -w membutuhkan satu atau lebih argumen dengan bentuk NAME=VALUE dan +mengubah pengaturan baku dari variabel lingkungan yang diberikan sesuai dengan +nilainya. + +Untuk lebih lanjut tentang variabel lingkungan, lihat 'go help environment'. + + +[#hdr-Update_packages_to_use_new_APIs] +== Ubah paket untuk menggunakan API yang baru + +Penggunaan: + +---- +go fix [packages] +---- + +Perintah `fix` menjalankan perintah perbaikan Go terhadap nama paket-paket +yang diberikan lewat path impor. + +Untuk lebih lanjut tentang fix, lihat 'go doc cmd/fix'. +Untuk lebih lanjut tentang argumen paket, lihat 'go help packages'. + +Untuk menjalankan fix dengan opsi-opsi tertentu, jalankan 'go tool fix'. + +Lihat juga: go fmt, go vet. + + +[#hdr-Gofmt__reformat__package_sources] +== Gofmt (format ulang) sumber-sumber paket + +Penggunaan: + +---- +go fmt [-n] [-x] [packages] +---- + +Fmt menjalankan program 'gofmt -l -w' pada paket-paket berdasarkan nama dari +path import. +Ia akan mencetak nama berkas yang diubah. + +Untuk informasi lebih lanjut tentang gofmt, lihat 'go doc cmd/gofmt'. +Untuk informasi tentang menentukan paket, lihat 'go help packages'. + +Opsi -n mencetak perintah yang akan dieksekusi. +Opsi -x mencetak perintah saat dieksekusi. + +Opsi -mod menset mode unduhan yang akan digunakan: baca-saja atau vendor. +Lihat 'go help modules' untuk lebih lanjut. + +Untuk menjalankan gofmt dengan opsi tertentu, jalankan gofmt itu sendiri. + +Lihat juga: go fix, go vet. + + +[#hdr-Generate_Go_files_by_processing_source] +== Buat berkas Go dengan memproses sumber + +Penggunaan: + +---- +go generate [-run regexp] [-n] [-v] [-x] [build flags] [file.go... | packages] +---- + +Generate menjalankan perintah yang dijelaskan oleh petunjuk dalam berkas. +Perintah tersebut dapat menjalankan proses apa saja namun tujuannya yaitu +membuat atau memperbarui sumber berkas Go. + +Go generate tidak pernah dijalankan secara otomatis oleh go build, go get, go +test, and seterusnya. +Ia harus dijalankan secara eksplisit. + +Go generate memindai petunjuk dalam berkas, yang berupa baris dalam bentuk, + +---- +//go:generate perintah argumen... +---- + +(catatan: tidak ada spasi awal dan spasi dalam "//go") yang mana "perintah" +adalah generator yang akan dijalankan, yang berkorespondensi dengan nama +berkas program yang dapat dijalankan di lokal. +Program tersebut harus ada dalam PATH dari _shell_, path penuh +(/usr/you/bin/mytool), atau sebuah alias dari perintah, yang dijelaskan di +bawah. + +Untuk memberitahu ke manusia atau mesin bahwa kode tersebut hasil generate, +sumber hasil generate seharusnya memiliki baris yang sesuai dengan _regular +expression_ (dalam sintaksis Go): + +---- +^// Code generated .* DO NOT EDIT\.$ +---- + +Baris tersebut bisa muncul di mana pun dalam berkas Go, namun biasanya berada +di awal supaya mudah dicari. + +Ingat bahwa go generate tidak mem-_parse_ berkas, sehingga baris-baris yang +mirip dengan _directive_ dalam komentar atau string akan dianggap sebagai +_directive_. + +Argumen dari _directive_ adalah token yang dipisahkan oleh koma atau string +dengan kutip ganda yang dikirim sebagai sebuah argumen saat ia dijalankan. + +String dengan tanda kutip menggunakan sintaksis Go dan dievaluasi sebelum +dieksekusi; +String dengan tanda kutip dianggap sebagai sebuah argumen oleh _generator_. + +Go generate men-set beberapa variabel saat ia berjalan: + +---- +$GOARCH + Arsitektur dari eksekusi (arm, amd64, dll.) +$GOOS + Sistem operasi dari eksekusi (linux, windows, dll.) +$GOFILE + Nama dari berkas. +$GOLINE + Nomor baris dari directive dalam sumber kode +$GOPACKAGE + Nama dari paket dari bekas yang berisi directive. +$DOLLAR + Karaketer dolar. +---- + +Selain penggantian variabel dan evaluasi string berkutip, tidak ada lagi +pemrosesan khusus yang dilakukan, seperti "globbing", dalam baris perintah. + +Sebagai langkah terakhir sebelum menjalankan perintah, pemanggilan variabel +lingkungan apa pun dengan nama alfa-numerik, seperti $GOFILE atau $HOME, akan +diganti lewat baris perintah. +Sintaksis dari penggatian variabel yaitu $NAME pada semua sistem operasi. +Dikarenakan urutan evaluasi, variabel diganti bahkan di dalam string berkutip. +Jika variabel NAME tidak diset, $NAME akan akan diganti dengan string kosong. + +Sebuah _directive_ dengan bentuk, + +---- +//go:generate -command xxx args... +---- + +menspesifikasikan, untuk berkas itu saja, bahwa string xxx merepresentasikan +perintah yang diidentifikasi oleh argumennya. +Hal ini bisa digunakan untuk membuat alias atau menangani generator dengan +banyak kata. +Sebagai contohnya, + +---- +//go:generate -command foo go tool foo +---- + +menentukan bahwa perintah "foo" merepresentasikan "go tool foo". + +Perintah generate memproses paket-paket dengan urutan sesuai dengan yang +diberikan pada baris perintah, satu per satu. +Jika baris perintah berisi berkas .go dari sebuah direktori, mereka akan +diperlakukan sebagai satu paket. +Dalam sebuah paket, generate memproses sumber berkas dalam paket berurutan +sesuai nama, satu per satu. +Dalam sebuah berkas, generate menjalankan generator dengan urutan kemunculan +dalam berkas, satu per satu. +Perkakas "go generate" juga men-set tag build "generate" sehingga +berkas-berkas bisa diperiksa oleh "go generate" namun diindahkan selama +pembangunan. + +Jika salah satu generator berhenti karena eror, "go generate" melewati semua +pemrosesan selanjutnya untuk paket tersebut. + +Si generator berjalan dalam sumber direktori paket. + +Go generate menerima satu opsi khusus: + +---- +-run="" + Jika tidak kosong, menspesifikasikan regular expression untuk memilih + directive yang keseluruhan teksnya (kecuali spasi dan baris baru) + cocok dengan ekspresi. +---- + +Go generate juga dapat menerima opsi "build" termasuk -v, -n, dan -x. +Opsi -v mencetak nama-nama paket dan berkas saat proses berjalan. +Opsi -n mencetak perintah yang akan dieksekusi. +Opsi -x mencetak perintah saat dieksekusi. + +Untuk lebih lanjut tentang opsi "build", lihat 'go help build'. + +Untuk lebih lanjut tentang cara menspesifikasikan paket, lihat 'go help +packages'. + + +[#hdr-Add_dependencies_to_current_module_and_install_them] +== Tambah dan pasang dependensi ke modul yang sekarang + +Penggunaan: + +---- +go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages] +---- + +Perintah "get" menambahkan dependensi ke modul pengembangan yang sekarang dan +kemudian membangun dan memasangnya. + +Langkah pertama yaitu menyelesaikan dependensi apa yang ditambahkan. + +Untuk setiap paket atau pola paket, "get" harus memutuskan versi mana dari +modul yang akan digunakan. +Secara baku, "get" mencari _tag_ dari versi rilis _tag_ yang terakhir, seperti +v0.4.5 atau v1.2.3. +Jika versi rilis tidak memiliki _tag_, "get" mencari versi _tag_ pra-rilis +yang terakhir, seperti v0.0.1-pre1. +Jika tidak ada versi _tag_ sama sekali, "get" mencari _commit_ terakhir. +Jika modul belum dibutuhkan (misalnya, pra-rilis lebih baru dan rilis +terakhir), "get" akan menggunakan versi yang dicarinya. +Selain itu, "get" akan menggunakan versi yang sekarang dibutuhkan. + +Pemilihan versi ini dapat ditimpa dengan menambahkan sufiks @version pada +argumen paket, seperti 'go get golang.org/x/text@v0.3.0'. +Versi tersebut bisa berupa prefiks: @v1 berarti versi terakhir yang tersedia +mulai dari v1. +Lihat 'go help modules' pada 'Module queries' untuk sintaks keseluruhan. + +Untuk modul yang disimpan dalam repositori dengan _version control system_ +(sistem kontrol versi, atau disingkat VCS), sufiks di versi bisa berupa _hash_ +dari _commit_, nama _branch_, atau sintaks lainnya yang dikenal oleh VCS +tersebut, seperti 'go get golang.org/x/text@master'. +Ingat bahwa nama _branch_ yang sama dengan sintaks _query_ modul tidak dapat +dipilih secara eksplisit. +Contohnya, sufiks @v2 artinya versi terakhir mulai dari v2, bukan _branch_ +yang bernama v2. + +Jika sebuah modul yang diinginkan sudah menjadi dependensi dari modul +pengembangan sekarang, maka "get" akan memperbarui versi yang dibutuhkan. +Menspesifikasikan sebuah versi yang lebih awal dari versi yang dibutuhkan +sekarang adalah valid dan akan men-_downgrade_ dependensi. +Versi dengan sufiks @none mengindikasikan bahwa dependensi harus dihapus +sepenuhnya, di-_downgrade_ atau menghapus modul yang bergantung kepadanya. + +Versi dengan sufiks @latest secara eksplisit meminta rilis minor terakhir dari +modul yang diberikan pada path argumen. +Sufiks @upgrade seperti @latest namun tidak akan men-_downgrade_ modul jika ia +sudah dibutuhkan pada versi tertentu atau versi pra-rilis lebih baru dari pada +versi rilis terbaru. +Sufiks @patch meminta rilis _patch_ terbaru: versi rilis terbaru dengan angka +mayor dan minor yang sama dengan yang dibutuhkan sekarang. +Seperti halnya dengan @upgrade, @path tidak akan men-_downgrade_ sebuah modul +yang sudah dibutuhkan pada versi terbaru. +Jika path tertentu belum diperlukan, @upgrade dan @path sama dengan @latest. + +Walaupun "get" secara bawaan menggunakan versi terakhir dari modul yang beris +nama paket, ia tidak menggunakan versi terakhir dari dependensi modul. +Namun ia menggunakan versi dependensi tertentu yang diminta oleh modul +tersebut. +Misalnya, jika A butuh modul B v1.2.3, sementara B v1.2.4 dan v1.3.1 juga +tersedia, maka 'go get A' akan menggunakan versi A yang terakhir namun +menggunakan B v1.2.3, seperti yang diminta oleh A. +(Jika ada kebutuhan yang saling bersaing untuk sebuah modul tertentu, 'go +get' menyelesaikan kebutuhan mereka dengan memilih versi maksimum yang +diminta.) + +Opsi -t menyuruh 'get' supaya mengunduh modul-modul yang dibutuhkan untuk +pengujian paket yang dispesifikasikan pada baris perintah. + +Opsi -u menyuruh 'get' untuk memperbarui modul-modul sebagai dependensi dari +nama paket pada baris perintah supaya menggunakan rilis minor atau patch +terbaru bila ada. +Melanjutkan contoh sebelumnya, 'go get -u A' akan menggunakan versi A yang +terakhir dengan B v1.3.1 (bukan B v1.2.3). +Jika B membutuhkan modul C, namun C tidak menyediakan paket apa pun yang +dibutuhkan untuk membangun paket di A, maka C tidak akan diperbarui. + +Opsi -u=patch (bukan '-u patch') juga menyuruh 'get' untuk memperbarui +dependensi, namun dengan menggunakan rilis patch saja. +Melanjutkan contoh sebelumnya, 'go get -u=patch A@latest' akan menggunakan +versi A yang terakhir dengan B v1.2.4 (bukan B v1.2.3), namun untuk +'go get -u=patch A' akan menggunakan rilis patch dari A. + +Bila opsi -t dan -u digunakan bersamaan, 'get' akan memperbarui dependensi tes +juga. + +Pada umumnya, menambahkan dependensi baru membutuhkan pembaruan dependensi +yang ada supaya pembangunan dapat berjalan, dan 'go get' akan melakukan hal +ini secara otomatis. +Hal yang sama, menurunkan versi salah satu dependensi bisa jadi menurunkan +dependensi yang lain, dan 'go get' juga menangani ini secara otomatis. + +Opsi -insecure membolehkan pengambilan dari repositori yang menggunakan skema +tidak aman seperti HTTP. +Gunakan dengan hati-hati. + +Langkah kedua yaitu mengunduh (bila perlu), membangun, dan memasang paket yang +diminta. + +Jika argumen berupa modul bukan paket (karena tidak ada sumber kode Go dalam +direktori akar dari modul), maka langkah pemasangan dilewati, bukan +menyebabkan gagal pembangunan. +Misalnya, 'go get golang.org/x/perf' akan sukses walaupun tidak ada kode di +dalam path impor tersebut. + +Ingat bahwa pola paket dibolehkan dan dikembangkan setelah versi modul +diselesaikan. +Misalnya, 'go get golang.org/x/perf/cmd/...' menambahkan versi +'golang.org/x/perf' yang terakhir dan kemudian memasang perintah-perintah pada +versi yang terakhir juga. + +Opsi -d membuat 'get' mengunduh kode yang dibutuhkan untuk membangun paket, +termasuk mengunduh dependensi yang dibutuhkan, namun tidak membangun dan +memasang mereka. + +Tanpa ada argumen, 'go get' berlaku terhadap paket Go di direktori yang +sekarang, jika ada. +Terutama, 'go get -u' dan 'go get -u=patch' memperbarui semua dependensi dari +paket tersebut. +Jika tidak ada argumen paket dan juga tanpa -u, 'go get' hampir sama dengan +'go install', dan 'go get -d' hampir sama dengan 'go list'. + +Untuk lebih tentang modul, lihat 'go help modules'. + +Untuk lebih lanjut tentang argumen paket, lihat 'go help packages'. + +Tulisan ini menjelaskan perilaku dari 'get' pada modul untuk mengatur kode dan +dependensi. +Jika perintah 'go' berjalan dalam mode GOPATH, opsi dari 'get' berubah, +sebagaimana juga 'go help get'. +Lihat 'go help modules' dan 'go help gopath-get'. + +Lihat juga: go build, go install, go clean, go mod. + + +[##hdr-Compile_and_install_packages_and_dependencies] +== Kompilasi dan pasang paket dan dependensi + +Penggunaan: + +---- +go install [-i] [build flags] [packages] +---- + +Perintah 'install' mengompilasi dan memasang paket berdasarkan path impor. + +Program _executable_ dipasang dalam direktori GOBIN dari variabel lingkungan, +yang bila kosong akan diset ke $GOPATH/bin atau $HOME/go/bin. +Program dalam $GOROOT dipasang di $GOROOT/bin atau $GOTOOLDIR bukan $GOBIN. + +Jika mode modul tidak aktif, paket-paket lain dipasang dalam direktori +$GOPATH/pkg/$GOOS_$GOARCH. +Jika mode modul aktif, paket-paket dibangun dan di-_cache_ tapi tidak +dipasang. + +Opsi -i memasang dependensi dari paket juga. + +Untuk informasi lebih lanjut tentang opsi pembangunan, lihat 'go help build'. +Untuk informasi lebih lanjut tentang penamaan paket, lihat 'go help packages'. + +Lihat juga: go build, go get, go clean. + + +[#hdr-List_packages_or_modules] +== Cetak daftar paket atau modul + +Penggunaan: + +---- +go list [-f format] [-json] [-m] [list flags] [build flags] [packages] +---- + +Perintah 'list' mencetak nama paket, per baris. +Opsi yang sering digunakan yaitu -f dan -json, yang mengatur pencetakan dari +setiap paket. +Opsi 'list' lainnya, mengontrol detail yang lebih khusus. + +Keluaran bakunya mencetak path impor dari paket: + +---- +bytes +encoding/json +github.com/gorilla/mux +golang.org/x/net/html +---- + +Opsi -f menentukan format alternatif dari daftar tersebut, menggunakan +sintaksis dari templat paket. +Keluaran bakunya sama dengan -f '{{.ImportPath}}'. +Struct yang dikirim ke templat yaitu: + +---- +type Package struct { + Dir string // direktori yang berisi sumber paket + ImportPath string // path impor dari paket dalam direktori + ImportComment string // path dalam komentar impor di perintah 'package' + Name string // nama paket + Doc string // dokumentasi paket + Target string // path pemasangan + Shlib string // pustaka yang berisi paket ini (hanya di set saat -linkshared) + Goroot bool // apakah paket ini ada di Go root? + Standard bool // apakah paket ini bagian dari pustaka standar Go? + Stale bool // apakah 'go install' melakukan sesuatu pada paket ini? + StaleReason string // penjelasan untuk Stale==true + Root string // direktori Go root atau Go path yang berisi paket ini + ConflictDir string // direktori ini menutup direktori dalam $GOPATH + BinaryOnly bool // paket yang binari saja (tidak lagi didukung) + ForTest string // paket hanya digunakan pada tes + Export string // berkas berisi data ekspor (saat menggunakan -export) + Module *Module // info tentang paket berisi modul, jika ada (bisa nil) + Match []string // pola baris-perintah yang sesuai dengan paket ini + DepOnly bool // paket ini hanya lah dependensi, tidak terdaftar secara eksplisit + + // Berkas-berkas sumber + GoFiles []string // berkas-berkas .go (kecuali CgoFiles, TestGoFiles, XTestGoFiles) + CgoFiles []string // berkas-berkas .go yang mengimpor "C" + CompiledGoFiles []string // berkas-berkas .go yang diberikan ke compiler (bila menggunakan -compiled) + IgnoredGoFiles []string // berkas-berkas .go yang diindahkan karena batasan pembangunan + CFiles []string // berkas-berkas .c + CXXFiles []string // berkas-berkas .cc, .cxx and .cpp + MFiles []string // berkas-berkas .m + HFiles []string // berkas-berkas .h, .hh, .hpp and .hxx + FFiles []string // berkas-berkas .f, .F, .for dan .f90 Fortran + SFiles []string // berkas-berkas .s + SwigFiles []string // berkas-berkas .swig + SwigCXXFiles []string // berkas-berkas .swigcxx + SysoFiles []string // berkas-berkas objek .syso yang ditambahkan ke arsip + TestGoFiles []string // berkas-berkas _test.go dalam paket + XTestGoFiles []string // berkas-berkas _test.go di luar paket + + // Cgo directives + CgoCFLAGS []string // cgo: opsi untuk C compiler + CgoCPPFLAGS []string // cgo: opsi untuk C preprocessor + CgoCXXFLAGS []string // cgo: opsi untuk C++ compiler + CgoFFLAGS []string // cgo: opsi untuk Fortran compiler + CgoLDFLAGS []string // cgo: opsi untuk linker + CgoPkgConfig []string // cgo: nama-nama pkg-config + + // Dependency information + Imports []string // path impor yang digunakan oleh paket ini + ImportMap map[string]string // map dari impor ke ImportPath (identitas dihilangkan) + Deps []string // semua (rekursif) dependensi yang diimpor + TestImports []string // impor dari TestGoFiles + XTestImports []string // impor dari XTestGoFiles + + // Error information + Incomplete bool // paket ini atau dependensinya memiliki eror + Error *PackageError // eror pada pemuatan paket + DepsErrors []*PackageError // eror pada pemuatan dependensi +} +---- + +Paket yang disimpan dalam direktori vendor melaporkan ImportPath yang +mengikutkan path ke direktori vendor (misalnya, "d/vendor/p" bukan "p"), +sehingga ImportPath secara unik mengidentifikasi salinan dari sebuah paket. +Daftar pada Imports, Deps, TestImports, dan XTestImports juga berisi path +impor yang diperluas ini. +Lihat golang.org/s/go15vendor untuk lebih lanjut tentang "vendor". + +Informasi eror, jika ada, yaitu + +---- +type PackageError struct { + ImportStack []string // path terpendek dari nama paket pada baris-perintah ke paket yang sekarang + Pos string // posisi eror (jika ada, berkas:baris:kolom) + Err string // eror itu sendiri +} +---- + +Informasi modul yaitu struct Module, didefinisikan dalam diskusi dari daftar +-m di bawah. + +Fungsi templat "join" memanggil strings.Join. + +Fungsi templat "context" mengembalikan context pembangunan, didefinisikan +sebagai: + +---- +type Context struct { + GOARCH string // target arsitektur + GOOS string // target sistem operasi + GOROOT string // Go root + GOPATH string // Go path + CgoEnabled bool // apakah cgo dapat digunakan + UseAllFiles bool // gunakan berkas, mengindahkan baris +build lines, nama berkas + Compiler string // compiler yang digunakan untuk path target + BuildTags []string // batasan build sesuai baris +build + ReleaseTags []string // rilis yang sekarang tidak kompatibel + InstallSuffix string // sufiks yang digunakan dalam direktori pemasangan +} +---- + +Untuk informasi lebih lanjut tentang makna dari field-field tersebut lihat +dokumentasi paket go/build untuk tipe Context. + +Opsi -json menyebabkan data paket dicetak dalam format JSON bukan menggunakan +format templat. + +Opsi -compiled men-set CompiledGoFiles dengan berkas sumber Go yang diberikan +kepada _compiler_. +Biasanya hal ini berisi berkas dalam GoFiles dan juga menambahkan kode Go yang +dihasilkan dari pemrosesan CgoFiles dan SwigFiles. +Daftar impor berisi gabungan dari semua impor GoFiles dan CompiledGoFiles. + +Opsi `-deps` membuat perintah "list" melakukan iterasi tidak hanya pada paket +tetapi juga semua dependensinya. +Semua dependensi dikunjungi secara _depth-first post-order_, sehingga paket +dicetak setelah semua dependensinya. +Paket-paket yang secara eksplisit tidak dicantumkan pada baris perintah akan +memiliki field `DepOnly` bernilai `true`. + +Opsi `-e` mengubah penanganan paket-paket yang eror, yaitu paket yang tidak +bisa ditemukan atau salah format. +Secara baku, perintah "list" mencetak kesalahan untuk setiap paket dan +mengindahkan paket yang eror tersebut. +Dengan opsi `-e`, perintah "list" tidak akan mencetak kesalahan namun +memproses paket yang eror tersebut. +Paket yang eror akan memiliki isi pada field `ImportPath` dan `Error`; +informasi lainnya bisa saja kosong. + +Opsi `-export` membuat field `Export` di-set dengan nama berkas yang berisi +informasi ekspor terbaru dari paket yang diberikan. + +Opsi `-find` membuat perintah "list" mengidentifikasi paket tetapi tidak +mencari dependensinya: field `Imports` dan `Deps` akan kosong. + +Opsi `-test` melaporkan tidak hanya nama paket namun juga program pengujiannya +(untuk paket-paket dengan tes), supaya perkakas analisis sumber kode tahu +bagaimana program test dibangun. +Path impor yang dilaporkan untuk sebuah program tes yaitu path import dari +paket diikuti oleh sufiks ".test", seperti "math/rand.test". +Saat membangun sebuah tes, terkadang perlu membangun ulang beberapa dependensi +khusus untuk tes (umumnya paket tes itu sendiri). +Path impor yang dilaporkan dari sebuah paket yang dikompilasi ulang untuk +sebuah program tes tertentu yaitu diikuti dengan sebuah spasi dan nama dari +program tes dalam tanda kurung siku, seperti "math/rand [math/rand.test]" +atau "regexp [sort.test]". +Field `ForTest` diisi dengan nama dari paket yang di tes ("math/rand" atau +"sort" pada contoh sebelumnya). + +Path berkas pada `Dir`, `Target`, `Shlib`, `Root`, `ConflictDir`, dan `Export` +adalah path absolut. + +Secara baku, daftar dalam `GoFiles`, `CgoFiles`, dan seterusnya berisi +nama-nama berkas dalam `Dir` (yaitu path yang relatif terhadap `Dir`, bukan +path absolut). +Berkas-berkas yang ditambah saat menggunakan opsi `-compiled` dan `-test` +adalah berupa path absolut yang mengacu ke salinan dari berkas sumber Go. +Walaupun mereka adalah sumber berkas Go, path mereka sendiri bisa saja tidak +diakhiri dengan ".go". + +Opsi `-m` mencetak daftar modul bukan paket-paket. + +Saat mencetak modul, opsi `-f` menentukan format templat yang diterapkan pada +sebuah Go struct, yaitu Module struct: + +---- +type Module struct { + Path string // path modul + Version string // versi modul + Versions []string // versi modul yang tersedia (dengan -versions) + Replace *Module // ditimpa oleh modul ini + Time *time.Time // waktu saat versi dibuat + Update *Module // update yang tersedia, jika ada (dengan -u) + Main bool // apakah ini modul utama? + Indirect bool // apakah modul ini dependensi tidak langsung dari + // modul utama? + Dir string // direktori tempat modul berada, jika ada + GoMod string // path ke berkas go.mod dari modul ini, jika ada + GoVersion string // versi Go yang digunakan oleh modul + Error *ModuleError // kesalahan yang terjadi saat memuat modul +} + +type ModuleError struct { + Err string // eror itu sendiri +} +---- + +Keluaran baku yaitu mencetak path modul dan informasi tentang versi dan +penggantinya jika ada. +Contohnya, 'go list -m all' mencetak: + +---- +my/main/module +golang.org/x/text v0.3.0 => /tmp/text +rsc.io/pdf v0.1.1 +---- + +Struct `Module` memiliki method String yang membuat format baris keluaran di +atas, sehingga format baku sama dengan `-f '{{.String}}'`. + +Ingatlah bahwa saat sebuah modul telah ditimpa, field `Replace` menjelaskan +modul yang menggantinya, dan field `Dir` diisi dengan sumber kode pengganti, +jika ada. +(Jika `Replace` tidak kosong, maka `Dir` diisi dengan `Replace.Dir`, tanpa +akses ke sumber kode yang menggantinya.) + +Opsi `-u` menambahkan informasi tambahan tentang adanya pembaruan. +Bila versi terakhir dari sebuah modul lebih baru dari yang sekarang, opsi `-u` +men-set field `Update` dengan informasi tentang modul terbaru. +Method `String` pada `Module` mengindikasikan adanya pembaruan dengan mencetak +versi terbaru dalam tanda kurung siku setelah versi yang sekarang. +Misalnya, 'go list -m -u all' bisa mencetak: + +---- +my/main/module +golang.org/x/text v0.3.0 [v0.4.0] => /tmp/text +rsc.io/pdf v0.1.1 [v0.1.2] +---- + +(Untuk perkakas luar, 'go list -m -u -json all' mungkin lebih mudah untuk +diurai.) + +Opsi `-versions` men-set field `Version` pada `Module` dengan daftar semua +versi dari modul tersebut, diurut berdasarkan versi semantik, dari yang lama +ke yang terbaru. +Opsi ini mengubah format keluaran baku dengan menampilkan path modul diikuti +daftar versi yang dipisahkan oleh spasi. +Misalnya, +---- +$ go list -m -versions github.com/shuLhan/share +go: finding versions for github.com/shuLhan/share +github.com/shuLhan/share v0.1.0 v0.2.0 v0.3.0 v0.4.0 v0.5.0 v0.6.0 v0.6.1 +$ +---- + +Argumen yang diberikan ke `-m` adalah daftar modul, bukan paket. +Modul utama yaitu modul yang berisi direktori sekarang. +Modul aktif adalah modul utama dan dependensinya. +Tanpa argumen, 'list -m' mencetak modul utama. +Dengan argumen, 'list -m' mencetak modul yang diberikan pada argumen. +Modul-modul yang aktif dapat dispesifikasikan dengan path modul mereka. +Pola khusus seperti "all" menentukan semua modul aktif, pertama modul utama +dan kemudian dependensinya diurut berdasarkan path modul. +Pola yang berisi "..." menentukan modul aktif yang path modul-nya cocok dengan +pola tersebut. +Kueri dengan format "path@version" menentukan hasil dari pencarian +tersebut, yang tidak dibatasi oleh modul aktif. +Lihat 'go help modules' untuk lebih tentang kueri modul. + +Fungsi templat "module" menerima argumen sebuah string yang harus berupa path +modul atau kueri dan mengembalikan modul tertentu sebagai struct `Module`. +Jika terjadi kesalahan, hasilnya berupa struct `Module` dengan field `Error` +yang berisi. + +Untuk lebih lanjut tentang opsi "build", lihat 'go help build'. + +Untuk lebih lanjut tentang penentuan paket, lihat 'go help packages'. + +Untuk lebih lanjut tentang modul, lihat 'go help modules'. + +[#hdr-Module_maintenance] +== Pemeliharaan modul + +Perintah 'go mod' menyediakan akses terhadap operasi-operasi pada modul. + +Ingatlah bahwa dukungan untuk modul tertanam pada semua perintah go, tidak +hanya 'go mod'. +Misalnya, penambahan, penghapusan, pembaruan, dan pemunduran dari dependensi +seharusnya dilakukan menggunakan 'go get'. +Lihat 'go help modules' untuk gambaran dari fungsionalitas modul. + +Penggunaan: + +---- +go mod <command> [arguments] +---- + +Argumen "command" adalah: + +---- +download unduh modul ke lokal cache +edit sunting go.mod dengan perkakas atau skrip +graph cetak dependensi modul +init inisiasi modul baru di direktori sekarang +tidy tambah modul yang hilang atau hapus modul yang tidak digunakan +vendor salin semua dependensi ke direktori vendor +verify verifikasi dependensi sesuai dengan yang diharapkan +why jelaskan kenapa paket atau modul dibutuhkan +---- + +Gunakan "go help mod <command>" untuk informasi lebih lanjut tentang +perintah-perintah tersebut. + + +[#hdr-Download_modules_to_local_cache] +=== Unduh modul ke lokal _cache_ |
