Steuerdateien, die im Golang-Projekt erstellt werden sollen

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

Steuerdateien, die im Golang-Projekt erstellt werden sollen
So verweisen Sie auf statische Dateien in einem Django-Projekt
Bringen Sie Dateien in Windows zur WSL
Methode zum Erstellen einer Python-Umgebung in Xcode 6
Lesen von CSV-Dateien mit Pandas
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Zusammenfassung zum Importieren von Dateien in Python 3
So steuern Sie Multiprozesse ausschließlich in C-Sprache
Konvertieren Sie UTF-8-CSV-Dateien in Excel
So überprüfen / extrahieren Sie Dateien im RPM-Paket
So erhalten Sie die Dateien im Ordner [Python]
Beispiel-API-Server, der JSON in Golang empfängt
Stapelkonvertierung von PSD-Dateien im Verzeichnis in PDF
[TF] So erstellen Sie Tensorflow in einer Proxy-Umgebung
So laden Sie Dateien in Google Drive mit Google Colaboratory
Vorbereiten der Steuerung von Nashornobjekten mit Skripten in Grasshopper / Python
So erstellen Sie ein interaktives CLI-Tool mit Golang
Verwendung von Variablen in systemd Unit-Definitionsdateien
So laden Sie Dateien von Selenium of Python in Chrome herunter
So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
2 Möglichkeiten, alle CSV-Dateien in einem Ordner zu lesen
Batch-Konvertierung aller XLSX-Dateien im Ordner in CSV-Dateien
Erlauben Sie Python, die Zeichenfolge der Eingabedatei aus dem Ordner auszuwählen
Ein Befehl zum Auflisten aller Dateien in der Reihenfolge des Dateinamens