Maison  >  Article  >  développement back-end  >  Comment emballer Golang

Comment emballer Golang

PHPz
PHPzoriginal
2023-04-25 15:11:564615parcourir

Le packaging est une étape très importante lors de l'écriture de programmes en Golang et de leur déploiement dans un environnement de production. Un packaging approprié peut éviter les problèmes de dépendance, accélérer le déploiement et réduire les problèmes inutiles. Cet article explique comment utiliser les packagers Golang.

1. Comprendre le format de fichier exécutable de Go

Avant de commencer l'empaquetage, comprenez d'abord le format de fichier exécutable de Go. Go prend en charge la compilation croisée, ce qui signifie que les applications sur diverses plates-formes telles que Linux, Windows et Mac OS peuvent être compilées localement. Par conséquent, les formats de fichiers exécutables de Go sont divisés en deux types :

  1. ELF : adapté à Linux, BSD et. d'autres systèmes de type Unix.
  2. PE : Disponible pour Windows.

Comprendre cela est important pour l'empaquetage car nous devons générer les binaires correspondants pour différents systèmes d'exploitation.

2. Utilisez la commande go build pour empaqueter

Avant l'empaquetage, nous devons écrire le code du programme Golang. Utilisez ensuite la commande suivante pour empaqueter :

go build -o outputName

Cette commande compilera tous les fichiers .go du dossier actuel en fichiers exécutables binaires et les affichera dans outputName dans le fichier. .go 文件编译成二进制可执行文件,并将其输出到 outputName 文件中。

例如,我们有一个程序文件 main.go,我们可以进入这个文件所在目录,然后执行以下命令:

go build -o main

这将生成一个名为 main 的可执行文件。

但是,该命令只能在本地编译出可执行文件,部署到其他机器上可能会遇到依赖问题。因此,我们需要使用更为专业的打包方式。

三、使用 gox 进行交叉编译打包

gox 是一个开源的工具,用于在多个操作系统和 CPU 架构上交叉编译 Go 应用程序。使用 gox,我们可以一次性打包不同操作系统的可执行文件,集成运行文件。

在安装 gox 前,我们需要先安装 dep 工具(dep 是 Go 的 package 管理器),安装方法如下:

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

安装完成后,我们需要定义项目依赖关系,使用以下命令:

dep init

接下来,我们就可以安装 gox 工具了。执行以下命令即可:

go get -u github.com/mitchellh/gox

安装完成后,我们可以在项目根目录下执行以下命令进行打包:

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

其中,-osarch 参数用于指定要编译的平台;-output 参数用于指定输出目录和文件名,可以为多个操作系统输出不同的名称;-ldflags 用于指定链接器标志,可以让生成的二进制文件更小。

例如,我们要打包 Linux、Windows 和 Mac OS 三个平台的可执行文件,我们可以执行以下命令:

gox -osarch="linux/amd64 windows/amd64 darwin/amd64" -output="build/{{.OS}}-{{.Arch}}/AppName" -ldflags "-s -w"

将生成三个平台的可执行文件,并放在 build 目录下以操作系统名和 CPU 架构命名的文件夹内。

四、使用 Docker 容器打包

Docker 是一个强大的容器化解决方案,我们可以在 Docker 容器中运行和构建应用程序,使交叉编译更加方便。使用 Docker 打包可以解决多版本支持问题。

首先,我们需要安装 Docker,可以在 Docker 官网下载对应的安装程序。

安装完成后,我们可以编写一个 Dockerfile 文件,指定编译环境和操作系统版本。以下是一个简单的示例:

# 设置基础镜像
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"]

该 Dockerfile 包含了两个阶段:

  1. build 阶段:基于 Alpine 镜像,将工作目录切换至 /app 目录,然后将代码拷贝到镜像中进行编译,最终生成二进制可执行文件 app
  2. 部署 阶段:基于 Alpine 镜像,将 build 阶段编译生成的可执行文件 app 拷贝到容器中,并暴露端口并运行程序。

我们可以使用以下命令进行打包:

docker build -t image_name .

其中,image_name 为打包后的镜像名,. 表示当前目录为存放 Dockerfile 等文件的位置。

打包完成后,我们可以运行容器,使用以下方式:

docker run -p 3000:3000 -d image_name

其中,-p 用于指定端口映射,-d

Par exemple, nous avons un fichier programme main.go, nous pouvons entrer le répertoire où se trouve ce fichier, puis exécuter la commande suivante :

rrreee

Cela générera un fichier nommé fichier exécutable principal.

Cependant, cette commande ne peut compiler un fichier exécutable que localement, et le déploiement sur d'autres machines peut rencontrer des problèmes de dépendance. Par conséquent, nous devons utiliser une méthode d’emballage plus professionnelle.

3. Utilisez gox pour la compilation croisée et le packaging 🎜🎜gox est un outil open source utilisé pour compiler de manière croisée des applications Go sur plusieurs systèmes d'exploitation et architectures de processeur. En utilisant gox, nous pouvons empaqueter des fichiers exécutables pour différents systèmes d'exploitation en même temps et intégrer les fichiers en cours d'exécution. 🎜🎜Avant d'installer gox, nous devons installer l'outil dep (dep est le gestionnaire de packages de Go). La méthode d'installation est la suivante : 🎜rrreee🎜Une fois l'installation terminée, nous devons définir les dépendances du projet, utilisez la commande suivante. : 🎜rrreee🎜Ensuite, nous pouvons installer l'outil gox. Exécutez simplement la commande suivante : 🎜rrreee🎜Une fois l'installation terminée, nous pouvons exécuter la commande suivante dans le répertoire racine du projet pour le packaging : 🎜rrreee🎜 Parmi elles, le paramètre -osarch est utilisé pour spécifier la plate-forme à compiler ; -output est utilisé pour spécifier le répertoire de sortie et le nom du fichier, qui peut générer des noms différents pour plusieurs systèmes d'exploitation. -ldflags est utilisé pour spécifiez les indicateurs de l'éditeur de liens, ce qui permet à la taille du fichier binaire généré d'être plus petite. 🎜🎜Par exemple, si nous voulons empaqueter des fichiers exécutables pour trois plateformes : Linux, Windows et Mac OS, nous pouvons exécuter la commande suivante : 🎜rrreee🎜Les fichiers exécutables pour les trois plateformes seront générés et placés dans build Dans un dossier nommé avec le nom du système d'exploitation et l'architecture du processeur dans le répertoire. 🎜🎜4. Packaging à l'aide de conteneurs Docker🎜🎜Docker est une solution de conteneurisation puissante. Nous pouvons exécuter et créer des applications dans des conteneurs Docker, ce qui rend la compilation croisée plus pratique. L'utilisation du packaging Docker peut résoudre le problème de la prise en charge multi-versions. 🎜🎜Tout d'abord, nous devons installer Docker. Vous pouvez télécharger le programme d'installation correspondant sur le site officiel de Docker. 🎜🎜Une fois l'installation terminée, nous pouvons écrire un fichier Dockerfile pour spécifier l'environnement de compilation et la version du système d'exploitation. Voici un exemple simple : 🎜rrreee🎜Ce Dockerfile contient deux étapes : 🎜🎜🎜Étape build : sur la base de l'image Alpine, basculez le répertoire de travail vers /app répertoire , puis copiez le code dans l'image pour compilation, et enfin générez un fichier exécutable binaire app. 🎜🎜Étape Déploiement : sur la base de l'image Alpine, copiez le fichier exécutable app généré par l'étape build dans le conteneur, exposez le port et exécutez le programme. 🎜🎜🎜Nous pouvons utiliser la commande suivante pour empaqueter : 🎜rrreee🎜Parmi eux, image_name est le nom de l'image empaquetée, et . indique que le répertoire actuel est l'emplacement où Dockerfile et d'autres fichiers sont stockés. 🎜🎜Une fois l'empaquetage terminé, nous pouvons exécuter le conteneur en utilisant la méthode suivante : 🎜rrreee🎜Parmi eux, -p est utilisé pour spécifier le mappage de port, et -d signifie exécuter le conteneur en arrière-plan. 🎜🎜Grâce aux étapes ci-dessus, nous pouvons utiliser le programme d'empaquetage pratique de Docker et le déployer dans différents environnements de système d'exploitation. 🎜🎜Résumé🎜🎜Go ne nécessite pas trop de dépendances sur les programmes packagés car il est livré avec une bonne gestion des dépendances. L'utilisation du packaging de commandes go build peut générer des fichiers exécutables localement, tandis que l'utilisation du packaging de conteneurs gox ou Docker peut générer des programmes multiversions pour différentes plates-formes ou générer plusieurs versions à la fois. Pour les applications de niveau entreprise, nous vous recommandons d'utiliser l'empaquetage de conteneurs gox ou Docker pour correspondre à votre propre système de build pour une gestion automatisée de l'empaquetage et du déploiement. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn