Fichiers de contrôle à construire dans le projet Golang

Background

We are developing a project that needs to run on Windows and Linux. The project is written in Golang. There are a lot of codes that can be shared between these OS, so we decided to make it in the same project. By this way we can speed up the development process very much.

In the project, there are some code files that run on Windows only, some run on Linux only, and some run on both Windows and Linux. And we want to separating them on build. It means:

Benefit

By separating files on build, I can see that we have some benefits:

How can we do it

Firstly we need to divide the code for Linux and for Windows into different files. After that we can use one of the following ways.

Name the file

We can tell go what OS and what architecture we want to build a file by naming it. The followings are examples about file names and build behaviors:

The file name patterns are:

We can do this way if the build condition is only about OS and architecture.

Use // +build command

This way gives us more control on the environment. We can specify multiple OS and architectures, compiler, go version, -tags

// file name: hello.go
// +build linux windows
// +build amd64

package hello

The comment // +build above will tell go to build the file on Windows 64bit or Linux 64 bit. So when we build the project in freebsd, the package hello will be excluded from the files to be built.

If we have a test for this package, it will be something like this:

// file name: hello_test.go
// +build linux windows
// +build amd64

package hello

The comment // +build above will tell go to exclude this file from test on environments that are not Linux 64bit or Windows 64bit for us. We don't have to check the OS then skip the test.

For complex usage of // +build, please check golang documentation here: https://golang.org/cmd/go/#hdr-Build_constraints

Reference

Recommended Posts

Fichiers de contrôle à construire dans le projet Golang
Comment référencer des fichiers statiques dans un projet Django
Importer des fichiers de Windows vers WSL
Méthode pour créer un environnement Python dans Xcode 6
Comment lire des fichiers CSV avec Pandas
Convertir le fichier FBX en ASCII <-> BINARY en Python
Résumé de la façon d'importer des fichiers dans Python 3
Méthode de contrôle exclusive multi-processus en langage C
Convertir des fichiers CSV UTF-8 pour les lire dans Excel
Comment vérifier / extraire des fichiers dans un package RPM
Comment obtenir les fichiers dans le dossier [Python]
Exemple de serveur d'API qui reçoit JSON dans Golang
Conversion par lots de fichiers PSD du répertoire en PDF
[TF] Comment créer Tensorflow dans un environnement Proxy
Comment charger des fichiers dans Google Drive avec Google Colaboratory
Préparation au contrôle des objets rhino avec des scripts dans Grasshopper / Python
Comment créer un outil CLI interactif avec Golang
Comment utiliser des variables dans les fichiers de définition d'unité systemd
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Comment ajouter des numéros de page à un fichier PDF (en Python)
2 façons de lire tous les fichiers csv dans un dossier
Conversion par lots de tous les fichiers xlsx du dossier en fichiers CSV
Autoriser Python à sélectionner la chaîne de caractères du fichier d'entrée dans le dossier
Une commande pour lister tous les fichiers par ordre de nom de fichier