---
id: 1872edeaa3c5fc09a1eba338cf2b01b1
author: wHoIsDReAmer
title: 'Go fordítási idejű változó-injektálás: go build -ldflags -X használata'
description: Ez a dokumentum azt ismerteti, hogyan lehet fordítási időben Go string változók értékeit beilleszteni külső .env fájl nélkül, a `go build -ldflags "-X"` linker kapcsoló és a csomag szimbólumának teljes elérési útjának megadásával.
language: hu
date: 2025-06-01T15:56:46.352281271Z
path: /blog/posts/compile-time-variable-injection-of-go-z5420556c
category: api
---

## Háttér

A közelmúltbeli céges projektmunka során azt kerestem, hogy van-e mód arra, hogy `.env` fájl nélkül, fordítási időben injektáljak változókat.
Úgy gondoltam, hogy ha ez lehetséges, az rendkívül kényelmes lenne, hiszen így a `.env` fájlok és a különböző konfigurációs fájlok helyett elegendő egyetlen fájl.

Először azt néztem meg, van-e olyan `go:generate` CLI eszköz, amely a `.env` alapján konstansfájlt generál, de ilyet nem találtam.

Ha már úgyis így van, akkor egyszerűbb egyszerűen módosítani a constants fájlt, nem kell körülményesen generálni, így a Rustban található `include_bytes!` makróhoz hasonló módon, fordítási időben értékeket injektáló megoldást kerestem.

## Fordítási idejű változó injektálás

A használata egyszerű.

```go
package main

import "fmt"

var Foo string

func main() {
    fmt.Println(Foo)
}
```

Ha a fenti kód adott, akkor build időben a következő módon lehet injektálni.

```bash
go build -ldflags="-X 'main.Foo=bar'"
```

Az ldflag segítségével átadott argumentum révén fordítási időben a `Foo` változó értéke `bar` lesz. Ez egyszerű.

Ha a projektben több helyen is van azonos nevű csomag vagy változó, akkor **meg kell adni a csomag elérési útját**.

```go
// github.com/myproject/config/config.go
package config

var Version string

// github.com/myproject/internal/config/config.go
package config

var BuildTime string
```

Ilyen esetben a következő módon lehet megkülönböztetve injektálni:

```bash
go build -ldflags="-X 'github.com/myproject/config.Version=v1.0.0' -X 'github.com/myproject/internal/config.BuildTime=2025-05-27'"
```

Ugyanazon csomagon belül található több változó esetén is elegendő további argumentumokat átadni.

```bash
go build -ldflags="-X 'main.Version=v1.0.0' -X 'main.BuildTime=2025-05-27' -X 'main.GitCommit=abc123'"
```

Jellemzői a következők:

- **A változó nem kell, hogy exportált legyen**: kisbetűvel kezdődő változó is injektálható
- **Csak string típust támogat**: más típusokat nem támogat

## Hivatkozás

- [https://stackoverflow.com/questions/47509272/how-to-set-package-variable-using-ldflags-x-in-golang-build](https://stackoverflow.com/questions/47509272/how-to-set-package-variable-using-ldflags-x-in-golang-build)
