---
id: 1872edeaa3c5fc09a1eba338cf2b01b1
author: wHoIsDReAmer
title: 'Go Derleme Zamanı Değişken Enjeksiyonu: go build -ldflags -X Kullanımı'
description: Bu belgede, harici bir .env dosyasına ihtiyaç duymadan, go build -ldflags "-X" bağlayıcı bayrağı ve paket sembol yolu belirtilerek derleme zamanında Go dizgi değişkenlerine değer aktarma yöntemi ele alınmaktadır.
language: tr
date: 2025-06-01T15:56:46.352281271Z
path: /blog/posts/compile-time-variable-injection-of-go-z5420556c
category: api
---

## Arka Plan

Bu sefer şirket projesinde çalışırken, .env dosyası olmadan derleme zamanında değişken enjekte etmenin bir yolu olup olmadığını araştırdım.
Bunu yapabilirsek `.env` dosyaları veya birden fazla yapılandırma dosyası olmadan yalnızca tek bir dosyanın bulunması yeterli olacağı için son derece kullanışlı olacağını düşündüm.

İlk olarak `.env` dosyasından bir sabit dosyası üreten `go:generate` CLI benzeri bir araç aradım, ancak böyle bir araç bulamadım.

Oysa bunun için zaten constants dosyasını düzenlemek yeterliyken gen adımını ayrıca çalıştırmaya gerek yoktu. Bunun yerine Rust'taki `include_bytes!` makrosu gibi derleme zamanında değer enjekte edebilen bir yöntem buldum.

## Derleme Zamanında Değişken Enjeksiyonu

Kullanımı basittir.

```go
package main

import "fmt"

var Foo string

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

Yukarıdaki gibi bir kodunuz olduğunu varsayarsak, derleme sırasında şu şekilde enjekte edebilirsiniz.

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

ldflag ile argüman geçirildiğinde, derleme zamanında `Foo` değişkenine `bar` değeri enjekte edilir. Oldukça basit.

Projenizde aynı isme sahip paket veya değişkenler birden fazla yerde bulunuyorsa, **paket yolunu belirtmeniz** yeterlidir.

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

var Version string

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

var BuildTime string
```

Bu durumda, aşağıdaki şekilde ayırt ederek enjekte edebilirsiniz:

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

Aynı pakette birden fazla değişken olduğunda da ek argümanları iletmeniz yeterlidir.

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

Özellikleri şunlardır:

- **Değişkenin public olması gerekmez**: Küçük harfle başlayan değişkenlere de enjeksiyon yapılabilir.
- **Yalnızca string türü desteklenir**: Diğer türler desteklenmez.

## Referans

- [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)
