Pemrogram Go baru sering kali tidak tahu atau bingung apa fungsi perintah dasar go build.
Apa tepatnya yang dibuat go build
dan go install
perintah dan di mana mereka meletakkan hasil / keluaran?
go
build
compilation
icza
sumber
sumber
Jawaban:
Apa yang dilakukan
go
perintah itu tergantung pada apakah kita menjalankannya untuk paket "normal" atau untuk"main"
paket khusus .Untuk paket
go build
membangun paket Anda lalu membuang hasilnya .go install
build kemudian menginstal paket tersebut di$GOPATH/pkg
direktori Anda .Untuk perintah (paket
main
)go build
membangun perintah dan meninggalkan hasilnya di direktori kerja saat ini .go install
membangun perintah di direktori sementara lalu memindahkannya ke$GOPATH/bin
.Untuk apa lulus
go build
?Anda dapat mengirimkan paket ke
go build
, paket yang ingin Anda buat. Anda juga dapat memberikan daftar.go
file dari satu direktori, yang kemudian diperlakukan sebagai daftar file sumber yang menetapkan satu paket.Jika tidak ada paket (jalur impor) yang disediakan, build akan diterapkan pada direktori saat ini.
Jalur impor mungkin berisi satu atau beberapa karakter
"..."
pengganti (dalam hal ini adalah pola )....
bisa cocok dengan sembarang string, misalnyanet/...
cocok dengannet
paket dan paket yang ada di subfoldernya. Perintahsering digunakan untuk membangun paket di folder saat ini dan semua paket berulang. Perintah ini dikeluarkan di root proyek membangun proyek lengkap.
Untuk lebih lanjut tentang menentukan paket, jalankan
go help packages
.Tentang modul
Dukungan awal untuk modul Go diperkenalkan di Go 1.11, dan modul menjadi default yang dimulai dengan Go 1.13. Jika
go
alat dijalankan dari folder yang berisigo.mod
file (atau salah satu orang tua folder saat ini),go
alat tersebut berjalan dalam mode sadar modul (mode lama disebut mode GOPATH ).Saat membuat modul, apa yang dibangun ditentukan oleh daftar build . Daftar build awalnya hanya berisi modul utama (modul yang berisi direktori tempat
go
perintah dijalankan), dan dependensi modul utama ditambahkan ke daftar build, secara rekursif (dependensi dependensi juga ditambahkan).Untuk info lebih lanjut, jalankan
go help modules
.Pada dasarnya Anda dapat menggunakan
go build
sebagai pemeriksaan bahwa paket dapat dibangun (bersama dengan ketergantungannya) sementarago install
juga (secara permanen) menginstal hasilnya di folder yang tepat dari Anda$GOPATH
.go build
akan diam-diam berhenti jika semuanya OK, dan akan memberi Anda pesan kesalahan jika paket tidak dapat dibangun / dikompilasi.Setiap kali
go
alat menginstal paket atau biner, ia juga menginstal dependensi apa pun yang dimilikinya, jadi menjalankango install
juga akan menginstal paket tempat program Anda bergantung (tersedia untuk umum, paket "go gettable"), secara otomatis.Sebagai permulaan, baca halaman resmi Cara Menulis Kode Go .
Informasi selengkapnya tentang
go
alat: Perintah pergiAnda juga bisa mendapatkan bantuan lebih lanjut dengan menjalankan perintah berikut:
Perlu juga dicatat bahwa memulai Go 1.5
go install
juga menghapus file executable yang dibuat olehgo build
( sumber ):Untuk melengkapi daftar,
go run
kompilasi aplikasi Anda ke dalam folder sementara, dan mulai biner yang dapat dieksekusi tersebut. Saat aplikasi keluar, itu membersihkan file sementara dengan benar.Pertanyaan yang terinspirasi oleh karya Dave Cheney What do build build?
sumber
Untuk paket:
Itu tidak benar setelah Go 1.10 (Kuartal 1 2018), terima kasih kepada CL 68116 dan CL 75473 . Lihat utas ini , yang saya rujuk di sini.
Sebenarnya ...
go install
akan berubah juga dengan Go 1.10, selain cache baru:sumber
go build
, apakahget
s? Saya mengalami kesalahan versicannot find package "github.com/spf13/cobra" in any of:…
. Saya tidak tahu bagaimana cara mengatakannya untuk mendapatkannya. Apakah saya perlu mendapatkan secara eksplisit?go.mod
file di dalamnya?go version go1.11.4 linux/amd64
. Saya tidak tahu tentang go.mod. Saya sedang membangun kembalihttps://github.com/cbroglie/mustache/blob/master/cmd/mustache/main.go
, ini aneh karena saya baru saja membangun seluruh paket, dan saya menggunakan contoh ini sebagai basis, dan saya membuat versi yang lebih mendasar yang berfungsi (tetapi tidak menggunakan pustaka ini). Saya tidak bisa melihat bagaimana itu tidak diinstal dengan paket kumis.