Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara pakej golang

Cara pakej golang

PHPz
PHPzasal
2023-04-25 15:11:564617semak imbas

Pembungkusan ialah langkah yang sangat penting apabila menulis program di Golang dan menempatkannya ke persekitaran pengeluaran. Pembungkusan yang betul boleh mengelakkan masalah pergantungan, mempercepatkan penggunaan dan mengurangkan masalah yang tidak perlu. Artikel ini menerangkan cara menggunakan pembungkus Golang.

1 Fahami format fail boleh laku Go

Sebelum memulakan pembungkusan, fahami dulu format fail boleh laku Go. Go menyokong kompilasi silang, yang bermaksud bahawa aplikasi pada pelbagai platform seperti Linux, Windows dan Mac OS boleh disusun secara setempat Oleh itu, format fail boleh laku Go dibahagikan kepada dua jenis:

  1. ELF: sesuai untuk Linux, BSD dan sistem seperti Unix yang lain.
  2. PE: Untuk Windows.

Memahami perkara ini penting untuk pembungkusan kerana kita perlu menjana binari yang sepadan untuk sistem pengendalian yang berbeza.

2. Gunakan arahan go build untuk membungkus

Sebelum pembungkusan, kita perlu menulis kod program Golang. Kemudian gunakan arahan berikut untuk membungkus:

go build -o outputName

Arahan ini akan menyusun semua .go fail dalam folder semasa ke dalam fail boleh laku binari dan mengeluarkannya ke fail outputName.

Sebagai contoh, kami mempunyai fail program main.go, kami boleh memasukkan direktori di mana fail ini terletak, dan kemudian laksanakan arahan berikut:

go build -o main

Ini akan menjana program fail bernama main Jalankan fail.

Walau bagaimanapun, arahan ini hanya boleh menyusun fail boleh laku secara setempat dan penggunaan ke mesin lain mungkin menghadapi masalah pergantungan. Oleh itu, kita perlu menggunakan kaedah pembungkusan yang lebih profesional.

3. Gunakan gox untuk penyusunan silang dan pembungkusan

gox ialah alat sumber terbuka yang digunakan untuk menyusun silang aplikasi Go pada berbilang sistem pengendalian dan seni bina CPU. Menggunakan gox, kami boleh membungkus fail boleh laku untuk sistem pengendalian yang berbeza pada satu masa dan menyepadukan fail yang sedang berjalan.

Sebelum memasang gox, kita perlu memasang alat dep (dep ialah pengurus pakej Go Cara pemasangan adalah seperti berikut:

go get -u github.com/golang/dep/cmd/dep

Selepas pemasangan selesai, kami). perlu menentukan kebergantungan projek , gunakan arahan berikut:

dep init

Seterusnya, kita boleh memasang alat gox. Hanya laksanakan arahan berikut:

go get -u github.com/mitchellh/gox

Selepas pemasangan selesai, kita boleh laksanakan arahan berikut dalam direktori akar projek untuk pembungkusan:

gox -osarch="目标操作系统和 CPU 架构" -output="输出目录/文件名" -ldflags "-s -w"

Antaranya, -osarch parameter digunakan untuk menentukan Platform yang akan disusun; parameter -output digunakan untuk menentukan direktori output dan nama fail, dan nama yang berbeza boleh dikeluarkan untuk berbilang sistem pengendalian, yang digunakan untuk menentukan bendera pemaut; boleh menjadikan fail binari yang dihasilkan lebih kecil. -ldflags

Sebagai contoh, jika kami ingin membungkus fail boleh laku untuk tiga platform: Linux, Windows dan Mac OS, kami boleh melaksanakan arahan berikut:

gox -osarch="linux/amd64 windows/amd64 darwin/amd64" -output="build/{{.OS}}-{{.Arch}}/AppName" -ldflags "-s -w"
akan menjana fail boleh laku untuk ketiga-tiga platform, Dan letakkannya dalam folder bernama dengan nama sistem pengendalian dan seni bina CPU dalam direktori

. build

4. Gunakan pembungkusan bekas Docker

Docker ialah penyelesaian kontena yang berkuasa Kami boleh menjalankan dan membina aplikasi dalam bekas Docker, menjadikan penyusunan silang lebih mudah. Menggunakan pembungkusan Docker boleh menyelesaikan masalah sokongan berbilang versi.

Pertama, kami perlu memasang Docker Anda boleh memuat turun program pemasangan yang sepadan dari tapak web rasmi Docker.

Selepas pemasangan selesai, kami boleh menulis fail Dockerfile untuk menentukan persekitaran kompilasi dan versi sistem pengendalian. Berikut ialah contoh mudah:

# 设置基础镜像
FROM golang:alpine as build

# 将工作目录切换至 /app 下
WORKDIR /app

# 拷贝代码到镜像中
COPY . .

# 编译应用程序
RUN go build -o app

# 部署阶段
FROM alpine

# 可执行文件拷贝到新镜像
COPY --from=build /app/app /app/

# 暴露端口
EXPOSE 3000

# 运行程序
CMD ["/app/app"]
Fail Docker ini mengandungi dua peringkat:

  1. Peringkat: Berdasarkan imej Alpine, tukar direktori kerja kepada build direktori, kemudian salin kod ke imej untuk penyusunan, dan akhirnya menjana fail boleh laku binari /app. Peringkat app
  2. : Berdasarkan imej Alpine, salin fail boleh laku 部署 yang dijana oleh kompilasi peringkat build ke dalam bekas, dedahkan port dan jalankan atur cara. app
Kita boleh menggunakan arahan berikut untuk membungkus:

docker build -t image_name .
di mana,

ialah nama imej berpakej dan image_name menunjukkan bahawa direktori semasa adalah tempat Dockerfile dan fail lain disimpan. .

Selepas pembungkusan selesai, kita boleh menjalankan bekas menggunakan kaedah berikut:

docker run -p 3000:3000 -d image_name
Di mana,

digunakan untuk menentukan pemetaan port, dan -p bermaksud menjalankan bekas di latar belakang. -d

Melalui langkah di atas, kami boleh menggunakan program pembungkusan mudah Docker dan menggunakan ia ke persekitaran sistem pengendalian yang berbeza.

Ringkasan

Go tidak memerlukan terlalu banyak pergantungan pada program berpakej kerana ia disertakan dengan pengurusan pergantungan yang baik. Menggunakan pembungkusan arahan go build boleh menjana fail boleh laku secara tempatan, manakala menggunakan pembungkusan bekas gox atau Docker boleh menjana program berbilang versi untuk platform berbeza atau menjana berbilang versi sekaligus. Untuk aplikasi peringkat perusahaan, kami mengesyorkan menggunakan pembungkusan bekas gox atau Docker untuk memadankan sistem binaan anda sendiri untuk pengurusan pembungkusan dan penggunaan automatik.

Atas ialah kandungan terperinci Cara pakej golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn