Podmíněný překlad v Golangu

Pavel Tipy & triky

Golang nepodporuje podmíněný překlad jako třeba v jazyce C či C++. Přesto se dá docílit podobného efektu s využitím build tagů.

Podmíněný překlad v Golangu

Bohužel, Go nedokáže podmíněným překladem zkompilovat jen část souboru, takže nejde docílit stejného chování jako v případě C/C++. Protože je ale Go multiplatformní, musí existovat možnost jak kompilovat různé kódy pod různými OS.

Build tagy

Na začátek souboru se může vložit řádek, ve kterém definujeme tagy, jestli se soubor má zkompilovat nebo ne. Některé tagy jsou již předem nadefinovány, jiné ale můžeme přidat sami. Podmínky překladu musí být na prvním řádku, zapisují se jako komentář a za ním musí být minimálně jeden volný řádek. 

Debug není předem nadefinovaný, ale můj vlastní tag. Následující soubor se zkompiluje pouze, pokud tag debug specifikujeme při kompilaci.

// +build debug

var a int

Následující soubor se zkompiluje pouze, pokud tag debug nespecifikujeme, v opačném případě se soubor ignoruje.

// +build !debug

var a int

Pokud by mezi definicí proměnné a komentářem nebyl volný řádek, kompilátor vezme komentář jako dokumentaci dané proměnné. Proto je nutné 1 volný řádek vždy vložit. Tagy ale mohou být zapsány na více řádků, poté se mezi nimi aplikuje operátor AND.

Kompilace

Tagy se určují jako parametry příkazu build. Pokud tedy chceme tag debug nastavit, provedeme to příkazem jako je níže

go build -tags debug

Nedosáhneme stejného chování jako podmíněný překlad v jiných jazycích, ale může pomoct.

Přidat komentář

Právě odpovídáte na existující komentář. Zrušit

Komentáře

Novinky z blogu

Přidání balíčku do Composeru bez Packagist

Composer umožňuje přidat balíček, který není zveřejněn na Packagist. Stačí, aby byl ve veřejném či privátním git repozitáři, dostupný lokálně na serveru v jiné složce nebo...

Další články