{"id":41357,"date":"2026-04-15T14:05:41","date_gmt":"2026-04-15T11:05:41","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/"},"modified":"2026-04-15T14:05:41","modified_gmt":"2026-04-15T11:05:41","slug":"go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/","title":{"rendered":"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?"},"content":{"rendered":"<p><title>Linux&#8217;ta Go Programlar\u0131 Derleme ve Kurulum Rehberi<\/title><br \/>\n<body><\/p>\n<p>Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber mi ar\u0131yorsunuz? Go geli\u015ftirme ortam\u0131n\u0131 kurmaktan ileri seviye optimizasyonlara kadar t\u00fcm ad\u0131mlar\u0131 ke\u015ffedin.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m d\u00fcnyas\u0131nda performans, \u00f6l\u00e7eklenebilirlik ve geli\u015ftirici verimlili\u011fi giderek daha kritik hale gelmektedir. Bu ba\u011flamda, Google taraf\u0131ndan geli\u015ftirilen Go programlama dili, \u00f6zellikle sunucu taraf\u0131 uygulamalar, mikroservisler ve komut sat\u0131r\u0131 ara\u00e7lar\u0131 (CLI) geli\u015ftirenler aras\u0131nda h\u0131zla pop\u00fclerlik kazanm\u0131\u015ft\u0131r. Peki, Go&#8217;nun bu y\u00fckseli\u015finin ard\u0131ndaki s\u0131rlar nelerdir ve \u00f6zellikle Linux gibi g\u00fc\u00e7l\u00fc ve esnek bir i\u015fletim sisteminde Go projelerinizi hayata ge\u00e7irmek bazen neden zorlay\u0131c\u0131 olabilir?<\/p>\n<p>Go&#8217;nun en dikkat \u00e7ekici \u00f6zelliklerinden biri, e\u015fzamanl\u0131l\u0131k (concurrency) modelidir. Goroutine&#8217;ler ve kanallar (channels) sayesinde, karma\u015f\u0131k paralel g\u00f6revleri basit ve etkili bir \u015fekilde y\u00f6netebilirsiniz. Ayr\u0131ca, Go derlenmi\u015f bir dil oldu\u011fundan, derlenen programlar genellikle \u00e7ok h\u0131zl\u0131 \u00e7al\u0131\u015f\u0131r ve tek bir ba\u011f\u0131ms\u0131z ikili dosya olarak da\u011f\u0131t\u0131labilir, bu da da\u011f\u0131t\u0131m ve y\u00f6netim s\u00fcre\u00e7lerini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r. Linux ise, a\u00e7\u0131k kaynak do\u011fas\u0131, g\u00fc\u00e7l\u00fc komut sat\u0131r\u0131 ara\u00e7lar\u0131 ve sunucu ortamlar\u0131ndaki yayg\u0131nl\u0131\u011f\u0131 ile Go projeleri i\u00e7in adeta bi\u00e7ilmi\u015f kaftand\u0131r. Ancak, bu iki g\u00fcc\u00fcn birle\u015fiminden en iyi \u015fekilde faydalanmak i\u00e7in do\u011fru kurulum, derleme ve da\u011f\u0131t\u0131m stratejilerini bilmek \u015fartt\u0131r.<\/p>\n<p>Bu makale, Go programlar\u0131n\u0131 Linux \u00fczerinde s\u0131f\u0131rdan ba\u015flayarak nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, derleyece\u011finizi ve hatta ileri d\u00fczey optimizasyonlarla nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. \u0130ster Go d\u00fcnyas\u0131na yeni ad\u0131m atan bir geli\u015ftirici olun, ister mevcut projelerinizi daha verimli hale getirmek isteyen deneyimli bir m\u00fchendis, bu rehber size Go ve Linux ekosisteminin sundu\u011fu t\u00fcm avantajlardan yararlanman\u0131z i\u00e7in gerekli bilgileri sa\u011flayacakt\u0131r. Hadi, Go programlaman\u0131n Linux \u00fczerindeki g\u00fcc\u00fcn\u00fc ke\u015ffetmeye ba\u015flayal\u0131m!<\/p>\n<h2>Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?<\/h2>\n<p>Go programlama dili, 2009 y\u0131l\u0131nda Google taraf\u0131ndan piyasaya s\u00fcr\u00fcld\u00fc\u011f\u00fcnden bu yana, modern yaz\u0131l\u0131m geli\u015ftirme pratiklerinin vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015ftir. Peki, Go&#8217;yu bu kadar \u00e7ekici k\u0131lan temel \u00f6zellikler nelerdir ve \u00f6zellikle Linux i\u015fletim sisteminde bu dilin sundu\u011fu avantajlar nas\u0131l \u00f6ne \u00e7\u0131kar? Bu b\u00f6l\u00fcmde, Go&#8217;nun benzersiz niteliklerini ve Linux ile olan m\u00fckemmel uyumunu derinlemesine inceleyece\u011fiz.<\/p>\n<p>Go&#8217;nun en belirgin \u00f6zelliklerinden biri, \u015f\u00fcphesiz basitli\u011fidir. Dilin s\u00f6zdizimi (syntax) olduk\u00e7a temiz ve okunmas\u0131 kolayd\u0131r, bu da yeni ba\u015flayanlar i\u00e7in \u00f6\u011frenme e\u011frisini d\u00fc\u015f\u00fcr\u00fcrken, deneyimli geli\u015ftiricilerin de h\u0131zl\u0131ca ve hatas\u0131z kod yazmas\u0131na olanak tan\u0131r. Karma\u015f\u0131k \u00f6zelliklerden ka\u00e7\u0131narak, Go geli\u015ftiricilerin daha \u00e7ok i\u015flevselli\u011fe odaklanmas\u0131n\u0131 sa\u011flar. Bunun yan\u0131 s\u0131ra, Go&#8217;nun g\u00fc\u00e7l\u00fc standart k\u00fct\u00fcphanesi, a\u011f ileti\u015fimi, dosya i\u015flemleri, \u015fifreleme gibi bir\u00e7ok yayg\u0131n g\u00f6revi kolayca yerine getirmenizi sa\u011flar, b\u00f6ylece harici ba\u011f\u0131ml\u0131l\u0131klara olan ihtiyac\u0131 azalt\u0131r.<\/p>\n<p>Performans, Go&#8217;nun bir di\u011fer kilit \u00f6zelli\u011fidir. Derlenmi\u015f bir dil olmas\u0131 sayesinde, Go programlar\u0131 genellikle C veya C++&#8217;a yak\u0131n performans sergilerken, garbage collector (\u00e7\u00f6p toplay\u0131c\u0131) sayesinde bellek y\u00f6netimini otomatik olarak halleder. Bu, \u00f6zellikle y\u00fcksek performans gerektiren sunucu uygulamalar\u0131 ve mikroservisler i\u00e7in Go&#8217;yu ideal bir se\u00e7enek haline getirir. E\u015fzamanl\u0131l\u0131k (concurrency) ise Go&#8217;nun alametifarikas\u0131d\u0131r. Goroutine&#8217;ler ve kanallar (channels) arac\u0131l\u0131\u011f\u0131yla, paralel g\u00f6revleri son derece hafif ve verimli bir \u015fekilde y\u00f6netebilirsiniz. Binlerce goroutine&#8217;i ayn\u0131 anda \u00e7al\u0131\u015ft\u0131rmak bile sistem kaynaklar\u0131n\u0131 minimal d\u00fczeyde t\u00fcketir, bu da Go&#8217;yu y\u00fcksek \u00f6l\u00e7eklenebilirlik gerektiren sistemler i\u00e7in vazge\u00e7ilmez k\u0131lar. \u00d6rne\u011fin, bir web sunucusu veya API a\u011f ge\u00e7idi geli\u015ftirirken, Go&#8217;nun e\u015fzamanl\u0131l\u0131k yetenekleri sayesinde binlerce e\u015fzamanl\u0131 iste\u011fi kolayca i\u015fleyebilirsiniz.<\/p>\n<p>Linux, Go i\u00e7in do\u011fal bir ev sahibidir. A\u00e7\u0131k kaynakl\u0131 yap\u0131s\u0131, geni\u015f geli\u015ftirici toplulu\u011fu ve sunucu ortamlar\u0131ndaki bask\u0131nl\u0131\u011f\u0131, Go projeleri i\u00e7in Linux&#8217;u en pop\u00fcler platformlardan biri yapar. Linux&#8217;un g\u00fc\u00e7l\u00fc komut sat\u0131r\u0131 ara\u00e7lar\u0131, otomasyon yetenekleri ve esnekli\u011fi, Go geli\u015ftiricilerine projelerini derlemek, test etmek ve da\u011f\u0131tmak i\u00e7in e\u015fsiz bir ortam sunar. Dahas\u0131, Go programlar\u0131 tek bir derlenmi\u015f ikili dosya olarak \u00fcretildi\u011fi i\u00e7in, bu dosyalar\u0131 Linux sistemlerinde da\u011f\u0131tmak ve \u00e7al\u0131\u015ft\u0131rmak son derece basittir. Ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131yla u\u011fra\u015fmak yerine, derlenmi\u015f dosyay\u0131 hedef sisteme kopyalay\u0131p do\u011frudan \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu &#8220;tek dosya&#8221; \u00f6zelli\u011fi, \u00f6zellikle mikroservis mimarilerinde veya Docker gibi konteyner teknolojileriyle birlikte kullan\u0131ld\u0131\u011f\u0131nda b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<\/p>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, Go&#8217;nun bu avantajlar\u0131 somut faydalar sunar. \u00d6rne\u011fin, b\u00fcy\u00fck bir e-ticaret platformunun arka u\u00e7 (backend) mikroservislerini d\u00fc\u015f\u00fcnelim. Her bir mikroservis, \u00fcr\u00fcn kataloglama, sipari\u015f i\u015fleme veya kullan\u0131c\u0131 kimlik do\u011frulama gibi belirli bir i\u015flevden sorumlu olabilir. Go ile yaz\u0131lan bu servisler, d\u00fc\u015f\u00fck gecikme s\u00fcreleri ve y\u00fcksek i\u015flem hacmi sa\u011flayarak kullan\u0131c\u0131 deneyimini iyile\u015ftirir. Ayr\u0131ca, tek ikili dosya olarak da\u011f\u0131t\u0131labilmeleri sayesinde, bu servislerin g\u00fcncellenmesi ve yeni sunuculara da\u011f\u0131t\u0131lmas\u0131 \u00e7ok daha h\u0131zl\u0131 ve sorunsuz ger\u00e7ekle\u015fir. Bu durum, DevOps s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r ve operasyonel maliyetleri d\u00fc\u015f\u00fcr\u00fcr. Dolay\u0131s\u0131yla, Go&#8217;nun basitli\u011fi, performans\u0131 ve Linux ile olan uyumu, modern ve \u00f6l\u00e7eklenebilir uygulamalar geli\u015ftirmek isteyen herkes i\u00e7in g\u00fc\u00e7l\u00fc bir kombinasyon sunar.<\/p>\n<h2>Linux&#8217;ta Go Geli\u015ftirme Ortam\u0131 Nas\u0131l Kurulur? Ad\u0131m Ad\u0131m Rehber<\/h2>\n<p>Go programlar\u0131 geli\u015ftirmeye ba\u015flamadan \u00f6nce, Linux sisteminizde do\u011fru bir geli\u015ftirme ortam\u0131 kurman\u0131z gerekmektedir. Bu b\u00f6l\u00fcm, Go&#8217;yu indirmekten ortam de\u011fi\u015fkenlerini ayarlamaya ve ilk &#8220;Merhaba D\u00fcnya&#8221; program\u0131n\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmaya kadar t\u00fcm ad\u0131mlar\u0131 detayl\u0131 bir \u015fekilde a\u00e7\u0131klayacakt\u0131r. Bu ad\u0131mlar\u0131 takip ederek, k\u0131sa s\u00fcrede Go ile kod yazmaya haz\u0131r hale geleceksiniz.<\/p>\n<h3>Go&#8217;yu \u0130ndirme ve Kurulum<\/h3>\n<p>Go&#8217;nun kurulumu olduk\u00e7a basittir. \u0130lk olarak, Go&#8217;nun resmi web sitesinden en g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc indirmeniz gerekmektedir. Genellikle, Linux i\u00e7in uygun olan bir tarball (<code>.tar.gz<\/code> uzant\u0131l\u0131 dosya) bulunur. Terminalinizi a\u00e7\u0131n ve a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyin:<\/p>\n<ol>\n<li><strong>Go s\u00fcr\u00fcm\u00fcn\u00fc kontrol edin ve indirin:<\/strong> Go&#8217;nun resmi web sitesi olan <a href=\"https:\/\/go.dev\/dl\/\">go.dev\/dl<\/a> adresine gidin ve Linux i\u00e7in en son kararl\u0131 s\u00fcr\u00fcm\u00fcn ba\u011flant\u0131s\u0131n\u0131 kopyalay\u0131n. Ard\u0131ndan, terminalinizde <code>wget<\/code> komutunu kullanarak dosyay\u0131 indirin. \u00d6rne\u011fin, Go 1.22.4 s\u00fcr\u00fcm\u00fcn\u00fc indirmek i\u00e7in:\n<pre><code>wget https:\/\/go.dev\/dl\/go1.22.4.linux-amd64.tar.gz<\/code><\/pre>\n<p>Bu komut, Go paketini mevcut dizininize indirecektir.<\/p>\n<\/li>\n<li><strong>Ar\u015fivi \u00c7\u0131kar\u0131n:<\/strong> \u0130ndirdi\u011finiz tarball dosyas\u0131n\u0131 genellikle <code>\/usr\/local<\/code> dizinine \u00e7\u0131karman\u0131z \u00f6nerilir. Bu dizin, sistem genelinde kullan\u0131labilen yaz\u0131l\u0131mlar i\u00e7in standart bir konumdur. Y\u00f6netici ayr\u0131cal\u0131klar\u0131yla (<code>sudo<\/code>) bu i\u015flemi ger\u00e7ekle\u015ftirmelisiniz:\n<pre><code>sudo rm -rf \/usr\/local\/go\nsudo tar -C \/usr\/local -xzf go1.22.4.linux-amd64.tar.gz<\/code><\/pre>\n<p>\u0130lk komut, daha \u00f6nceki bir Go kurulumunu temizler (iste\u011fe ba\u011fl\u0131d\u0131r ama \u00f6nerilir), ikinci komut ise indirilen paketi <code>\/usr\/local<\/code> dizinine \u00e7\u0131kar\u0131r. Bu i\u015flem sonucunda, Go derleyicisi ve ara\u00e7lar\u0131 <code>\/usr\/local\/go<\/code> alt\u0131nda bulunacakt\u0131r.<\/p>\n<\/li>\n<\/ol>\n<h3>Ortam De\u011fi\u015fkenlerini Ayarlama<\/h3>\n<p>Go&#8217;yu sisteminizde kullan\u0131labilir hale getirmek i\u00e7in, <code>PATH<\/code> ortam de\u011fi\u015fkenine Go&#8217;nun ikili dosyalar\u0131n\u0131n bulundu\u011fu dizini eklemeniz gerekir. Ayr\u0131ca, Go&#8217;nun \u00e7al\u0131\u015fma alan\u0131 (workspace) i\u00e7in <code>GOPATH<\/code> de\u011fi\u015fkenini de ayarlaman\u0131z faydal\u0131 olacakt\u0131r, ancak modern Go mod\u00fclleriyle <code>GOPATH<\/code>&#8216;\u0131n \u00f6nemi azalm\u0131\u015ft\u0131r.<\/p>\n<ol>\n<li><strong><code>PATH<\/code> Ortam De\u011fi\u015fkenini Ayarlay\u0131n:<\/strong> Go&#8217;nun ikili dosyalar\u0131na (<code>go<\/code> komutu gibi) herhangi bir dizinden eri\u015febilmek i\u00e7in <code>\/usr\/local\/go\/bin<\/code> dizinini <code>PATH<\/code> de\u011fi\u015fkeninize eklemeniz gerekir. Bu ayar\u0131 kal\u0131c\u0131 hale getirmek i\u00e7in, genellikle kullan\u0131c\u0131 dizininizdeki <code>.bashrc<\/code>, <code>.zshrc<\/code> veya <code>.profile<\/code> dosyalar\u0131ndan birine ekleme yapmal\u0131s\u0131n\u0131z. \u00d6rne\u011fin, <code>.bashrc<\/code> i\u00e7in:\n<pre><code>echo 'export PATH=$PATH:\/usr\/local\/go\/bin' >> ~\/.bashrc\nsource ~\/.bashrc<\/code><\/pre>\n<p>\u0130lk komut, sat\u0131r\u0131 <code>.bashrc<\/code> dosyas\u0131na ekler. \u0130kinci komut ise de\u011fi\u015fikliklerin mevcut terminal oturumunuzda hemen etkili olmas\u0131n\u0131 sa\u011flar. Yeni bir terminal a\u00e7t\u0131\u011f\u0131n\u0131zda bu ayarlar otomatik olarak y\u00fcklenecektir.<\/p>\n<\/li>\n<li><strong><code>GOPATH<\/code> Ortam De\u011fi\u015fkenini Ayarlay\u0131n (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir):<\/strong> <code>GOPATH<\/code>, Go projelerinizin, ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131n ve derlenmi\u015f ikili dosyalar\u0131n\u0131z\u0131n depoland\u0131\u011f\u0131 bir dizindir. Modern Go mod\u00fclleriyle \u00e7al\u0131\u015f\u0131rken do\u011frudan gerekli olmasa da, Go&#8217;nun geleneksel \u00e7al\u0131\u015fma \u015feklini anlamak ve baz\u0131 ara\u00e7larla uyumluluk sa\u011flamak i\u00e7in ayarlanmas\u0131 iyi bir pratiktir. Genellikle kullan\u0131c\u0131 dizininizde bir <code>go<\/code> klas\u00f6r\u00fc olu\u015fturulur:\n<pre><code>echo 'export GOPATH=$HOME\/go' >> ~\/.bashrc\necho 'export PATH=$PATH:$GOPATH\/bin' >> ~\/.bashrc\nsource ~\/.bashrc<\/code><\/pre>\n<p>Bu ayarlar, Go projelerinizin <code>$HOME\/go<\/code> dizininde olmas\u0131n\u0131 ve Go taraf\u0131ndan derlenen \u00f6zel ara\u00e7lar\u0131n da <code>PATH<\/code>&#8216;inize eklenmesini sa\u011flar.<\/p>\n<\/li>\n<\/ol>\n<h3>Kurulumu Do\u011frulama ve \u0130lk Go Program\u0131<\/h3>\n<p>T\u00fcm bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, Go kurulumunuzun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<ol>\n<li><strong>Go S\u00fcr\u00fcm\u00fcn\u00fc Kontrol Edin:<\/strong>\n<pre><code>go version<\/code><\/pre>\n<p>Bu komut, kurulu Go s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6stermelidir (\u00f6rne\u011fin, <code>go version go1.22.4 linux\/amd64<\/code>). E\u011fer bir hata al\u0131rsan\u0131z, <code>PATH<\/code> ayarlar\u0131n\u0131z\u0131 kontrol edin.<\/p>\n<\/li>\n<li><strong>\u0130lk &#8220;Merhaba D\u00fcnya&#8221; Program\u0131:<\/strong> \u015eimdi basit bir Go program\u0131 yazal\u0131m. Bir dosya olu\u015fturun, \u00f6rne\u011fin <code>merhaba.go<\/code>:\n<pre><code>mkdir -p $GOPATH\/src\/merhaba\ncd $GOPATH\/src\/merhaba\nnano merhaba.go<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code><pre><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    fmt.Println(\"Merhaba D\u00fcnya, Go ve Linux!\")\n}\n<\/code><\/pre>\n<p><\/code><\/p>\n<p>Dosyay\u0131 kaydedip kapat\u0131n (<code>Ctrl+O<\/code>, <code>Enter<\/code>, <code>Ctrl+X<\/code>).<\/p>\n<\/li>\n<li><strong>Program\u0131 \u00c7al\u0131\u015ft\u0131r\u0131n:<\/strong> Go programlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131n iki temel yolu vard\u0131r: <code>go run<\/code> ve <code>go build<\/code>.\n<ul>\n<li><strong><code>go run<\/code>:<\/strong> Bu komut, kaynak kodunu derler ve hemen \u00e7al\u0131\u015ft\u0131r\u0131r, ancak derlenmi\u015f bir ikili dosya b\u0131rakmaz.\n<pre><code>go run merhaba.go<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131 olarak &#8220;Merhaba D\u00fcnya, Go ve Linux!&#8221; g\u00f6rmelisiniz.<\/p>\n<\/li>\n<li><strong><code>go build<\/code>:<\/strong> Bu komut, kaynak kodunu derler ve mevcut dizinde \u00e7al\u0131\u015ft\u0131r\u0131labilir bir ikili dosya olu\u015fturur. Bu dosya daha sonra do\u011frudan \u00e7al\u0131\u015ft\u0131r\u0131labilir.\n<pre><code>go build merhaba.go\n.\/merhaba<\/code><\/pre>\n<p>Yine ayn\u0131 \u00e7\u0131kt\u0131y\u0131 alacaks\u0131n\u0131z, ancak bu sefer program\u0131 do\u011frudan derlenmi\u015f ikili dosyadan \u00e7al\u0131\u015ft\u0131rd\u0131n\u0131z. Bu, da\u011f\u0131t\u0131m i\u00e7in \u00e7ok \u00f6nemlidir.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Tebrikler! Linux sisteminizde Go geli\u015ftirme ortam\u0131n\u0131 ba\u015far\u0131yla kurdunuz ve ilk Go program\u0131n\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131n\u0131z. Art\u0131k Go&#8217;nun sundu\u011fu g\u00fc\u00e7l\u00fc \u00f6zelliklerle projeler geli\u015ftirmeye haz\u0131rs\u0131n\u0131z.<\/p>\n<h2>Go Programlar\u0131n\u0131z\u0131 Linux \u00dczerinde Nas\u0131l Derlersiniz ve Y\u00f6netirsiniz?<\/h2>\n<p>Go geli\u015ftirme ortam\u0131n\u0131z\u0131 ba\u015far\u0131yla kurduktan sonra, s\u0131ra programlar\u0131n\u0131z\u0131 derleme ve y\u00f6netme a\u015famas\u0131na gelir. Go&#8217;nun derleme s\u00fcreci olduk\u00e7a basittir ancak farkl\u0131 senaryolar i\u00e7in bilmeniz gereken \u00e7e\u015fitli se\u00e7enekler ve teknikler bulunmaktad\u0131r. Bu b\u00f6l\u00fcmde, Go programlar\u0131n\u0131z\u0131 Linux \u00fczerinde nas\u0131l derleyece\u011finizi, derlenmi\u015f \u00e7\u0131kt\u0131lar\u0131 nas\u0131l y\u00f6netece\u011finizi ve hatta farkl\u0131 platformlar i\u00e7in nas\u0131l \u00e7apraz derleme yapaca\u011f\u0131n\u0131z\u0131 detayl\u0131ca inceleyece\u011fiz. Ayr\u0131ca, Go mod\u00fcllerinin ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimindeki rol\u00fcne de de\u011finece\u011fiz.<\/p>\n<h3>Basit Derleme ve \u00c7\u0131kt\u0131 Y\u00f6netimi<\/h3>\n<p>Bir Go program\u0131n\u0131 derlemek i\u00e7in en temel komut <code>go build<\/code>&#8216;dir. Bu komut, kaynak kodunuzu al\u0131r ve \u00e7al\u0131\u015ft\u0131r\u0131labilir bir ikili dosya olu\u015fturur. Varsay\u0131lan olarak, bu ikili dosya, derleme yapt\u0131\u011f\u0131n\u0131z dizinde, ana paketin ad\u0131n\u0131 ta\u015f\u0131yan bir isimle olu\u015fturulur.<\/p>\n<p>\u00d6rne\u011fin, <code>ana_uygulama.go<\/code> adl\u0131 bir dosyan\u0131z varsa ve i\u00e7inde <code>package main<\/code> tan\u0131ml\u0131ysa:<\/p>\n<pre><code><pre><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    fmt.Println(\"Bu benim Go uygulamam!\")\n}\n<\/code><\/pre>\n<p><\/code><\/p>\n<p>Bu dosyay\u0131 derlemek i\u00e7in:<\/p>\n<pre><code>go build ana_uygulama.go<\/code><\/pre>\n<p>Bu komut, mevcut dizinde <code>ana_uygulama<\/code> ad\u0131nda bir ikili dosya olu\u015fturacakt\u0131r. Bu dosyay\u0131 do\u011frudan \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code>.\/ana_uygulama<\/code><\/pre>\n<p>E\u011fer derlemek istedi\u011finiz proje birden fazla dosyadan olu\u015fuyorsa ve bunlar ayn\u0131 paketin par\u00e7as\u0131ysa, sadece dizin ad\u0131n\u0131 belirterek t\u00fcm paketi derleyebilirsiniz. \u00d6rne\u011fin, <code>myproject<\/code> adl\u0131 bir dizin i\u00e7inde birden fazla <code>.go<\/code> dosyas\u0131 varsa:<\/p>\n<pre><code>cd myproject\ngo build<\/code><\/pre>\n<p>Bu durumda, <code>myproject<\/code> ad\u0131nda bir ikili dosya olu\u015facakt\u0131r.<\/p>\n<h3>\u00c7\u0131kt\u0131 Ad\u0131n\u0131 \u00d6zelle\u015ftirme<\/h3>\n<p>Derlenen ikili dosyan\u0131n ad\u0131n\u0131 de\u011fi\u015ftirmek isterseniz, <code>-o<\/code> (output) bayra\u011f\u0131n\u0131 kullanabilirsiniz. Bu, \u00f6zellikle farkl\u0131 s\u00fcr\u00fcmler veya platformlar i\u00e7in derleme yaparken kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>go build -o benim_uygulamam ana_uygulama.go<\/code><\/pre>\n<p>Bu komut, <code>benim_uygulamam<\/code> ad\u0131nda bir ikili dosya olu\u015fturur.<\/p>\n<h3>\u00c7apraz Derleme (Cross-Compilation)<\/h3>\n<p>Go&#8217;nun en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri, farkl\u0131 i\u015fletim sistemleri ve mimariler i\u00e7in kolayca \u00e7apraz derleme yapabilmesidir. Yani, Linux bir makinede Windows i\u00e7in veya ARM tabanl\u0131 bir sistem i\u00e7in bir Go program\u0131 derleyebilirsiniz. Bu, \u00f6zellikle da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini basitle\u015ftirir.<\/p>\n<p>\u00c7apraz derleme i\u00e7in <code>GOOS<\/code> (hedef i\u015fletim sistemi) ve <code>GOARCH<\/code> (hedef mimari) ortam de\u011fi\u015fkenlerini kullan\u0131rs\u0131n\u0131z. \u00d6rne\u011fin, Linux makinenizde Windows i\u00e7in 64-bit bir program derlemek isterseniz:<\/p>\n<pre><code>GOOS=windows GOARCH=amd64 go build -o benim_uygulamam.exe ana_uygulama.go<\/code><\/pre>\n<p>Benzer \u015fekilde, bir ARM tabanl\u0131 Linux sistemi (\u00f6rne\u011fin Raspberry Pi) i\u00e7in derleme yapmak isterseniz:<\/p>\n<pre><code>GOOS=linux GOARCH=arm64 go build -o benim_uygulamam_arm64 ana_uygulama.go<\/code><\/pre>\n<p>Bu sayede, tek bir geli\u015ftirme ortam\u0131nda farkl\u0131 platformlar i\u00e7in da\u011f\u0131t\u0131labilir ikili dosyalar olu\u015fturabilirsiniz. Bu \u00f6zellik, bulut tabanl\u0131 uygulamalar, IoT cihazlar\u0131 veya farkl\u0131 istemci i\u015fletim sistemleri i\u00e7in CLI ara\u00e7lar\u0131 geli\u015ftirenler i\u00e7in kritik bir avantaj sa\u011flar.<\/p>\n<h3>Go Mod\u00fclleri ile Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi<\/h3>\n<p>Go mod\u00fclleri, Go projelerindeki ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmek i\u00e7in modern ve standart bir yoldur. Projenizin kendi ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izlemesini ve di\u011fer projelerden izole olmas\u0131n\u0131 sa\u011flar. Bir Go mod\u00fcl\u00fc ba\u015flatmak i\u00e7in proje dizininizde <code>go mod init<\/code> komutunu kullan\u0131rs\u0131n\u0131z:<\/p>\n<pre><code>mkdir my_go_project\ncd my_go_project\ngo mod init github.com\/kullaniciadi\/my_go_project<\/code><\/pre>\n<p>Bu komut, <code>go.mod<\/code> adl\u0131 bir dosya olu\u015fturur. Bu dosya, projenizin mod\u00fcl yolu ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 hakk\u0131nda bilgi i\u00e7erir. Projenizde yeni bir ba\u011f\u0131ml\u0131l\u0131k kulland\u0131\u011f\u0131n\u0131zda (\u00f6rne\u011fin, <code>fmt<\/code> d\u0131\u015f\u0131nda bir k\u00fct\u00fcphane), Go otomatik olarak bu ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 <code>go.mod<\/code> dosyas\u0131na ekler ve <code>go.sum<\/code> dosyas\u0131nda kontrol toplamlar\u0131n\u0131 tutar. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 manuel olarak indirmek i\u00e7in <code>go get<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code>go get github.com\/gorilla\/mux<\/code><\/pre>\n<p>Derleme yaparken, Go mod\u00fclleri sayesinde ba\u011f\u0131ml\u0131l\u0131klar otomatik olarak indirilir ve kullan\u0131l\u0131r:<\/p>\n<pre><code>go build<\/code><\/pre>\n<p>Bu yap\u0131, ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r ve projelerinizin daha ta\u015f\u0131nabilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Vaka Analizi: \u00c7ok Platformlu CLI Arac\u0131<\/h3>\n<p>Bir geli\u015ftiricinin, kullan\u0131c\u0131lar\u0131n farkl\u0131 Linux da\u011f\u0131t\u0131mlar\u0131nda (Ubuntu, Fedora, Arch) ve hatta macOS&#8217;ta kullanabilece\u011fi bir komut sat\u0131r\u0131 arac\u0131 (CLI) geli\u015ftirdi\u011fini varsayal\u0131m. Geli\u015ftirici, bu arac\u0131 kendi Ubuntu makinesinde yaz\u0131yor. \u00c7apraz derleme sayesinde, her bir platform i\u00e7in ayr\u0131 bir derleme ortam\u0131 kurmas\u0131na gerek kalmaz:<\/p>\n<ul>\n<li><strong>Ubuntu\/Debian tabanl\u0131 sistemler i\u00e7in:<\/strong>\n<pre><code>GOOS=linux GOARCH=amd64 go build -o mycli_linux_amd64 main.go<\/code><\/pre>\n<\/li>\n<li><strong>macOS i\u00e7in:<\/strong>\n<pre><code>GOOS=darwin GOARCH=amd64 go build -o mycli_macos_amd64 main.go<\/code><\/pre>\n<\/li>\n<li><strong>ARM tabanl\u0131 Linux sistemleri (Raspberry Pi gibi) i\u00e7in:<\/strong>\n<pre><code>GOOS=linux GOARCH=arm64 go build -o mycli_linux_arm64 main.go<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>B\u00f6ylece geli\u015ftirici, tek bir komutla farkl\u0131 i\u015fletim sistemleri i\u00e7in da\u011f\u0131t\u0131ma haz\u0131r ikili dosyalar olu\u015fturabilir. Bu, Go&#8217;nun derleme s\u00fcrecinin ne kadar esnek ve g\u00fc\u00e7l\u00fc oldu\u011funu g\u00f6stermektedir.<\/p>\n<h2>Go Programlar\u0131n\u0131 Linux Sistemine Kal\u0131c\u0131 Olarak Nas\u0131l Kurars\u0131n\u0131z ve Da\u011f\u0131t\u0131rs\u0131n\u0131z?<\/h2>\n<p>Bir Go program\u0131n\u0131 ba\u015far\u0131yla derledikten sonra, bir sonraki ad\u0131m onu Linux sisteminize kal\u0131c\u0131 olarak kurmak ve gerekti\u011finde da\u011f\u0131tmakt\u0131r. Bu, program\u0131n kullan\u0131c\u0131lar taraf\u0131ndan kolayca eri\u015filebilir olmas\u0131n\u0131 sa\u011flamak, sistem ba\u015flang\u0131c\u0131nda otomatik olarak \u00e7al\u0131\u015fmas\u0131n\u0131 temin etmek veya daha geni\u015f kitlelere ula\u015ft\u0131rmak i\u00e7in \u00f6nemlidir. Bu b\u00f6l\u00fcmde, derlenmi\u015f Go ikili dosyalar\u0131n\u0131 sisteminize nas\u0131l entegre edece\u011finizi, systemd ile servis olarak nas\u0131l y\u00f6netece\u011finizi ve modern da\u011f\u0131t\u0131m y\u00f6ntemlerini (\u00f6zellikle Docker) ele alaca\u011f\u0131z.<\/p>\n<h3>Derlenmi\u015f \u0130kili Dosyay\u0131 PATH&#8217;e Ekleme<\/h3>\n<p>Bir Go program\u0131n\u0131 sisteminize kurman\u0131n en basit yolu, derlenmi\u015f ikili dosyay\u0131 sisteminizin <code>PATH<\/code> ortam de\u011fi\u015fkeninde bulunan bir dizine kopyalamakt\u0131r. Bu sayede, program\u0131 herhangi bir dizinden ad\u0131yla \u00e7a\u011f\u0131rabilirsiniz.<\/p>\n<p>Yayg\u0131n olarak kullan\u0131lan dizinler \u015funlard\u0131r:<\/p>\n<ul>\n<li><code>\/usr\/local\/bin<\/code>: Sistem genelinde t\u00fcm kullan\u0131c\u0131lar i\u00e7in eri\u015filebilir uygulamalar i\u00e7in. Y\u00f6netici ayr\u0131cal\u0131klar\u0131 gerektirir.<\/li>\n<li><code>$HOME\/bin<\/code> veya <code>$GOPATH\/bin<\/code>: Sadece mevcut kullan\u0131c\u0131 i\u00e7in eri\u015filebilir uygulamalar i\u00e7in.<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin, <code>benim_uygulamam<\/code> ad\u0131nda derlenmi\u015f bir Go program\u0131n\u0131z varsa ve bunu t\u00fcm kullan\u0131c\u0131lar i\u00e7in eri\u015filebilir hale getirmek istiyorsan\u0131z:<\/p>\n<pre><code>sudo cp benim_uygulamam \/usr\/local\/bin\/\nsudo chmod +x \/usr\/local\/bin\/benim_uygulamam<\/code><\/pre>\n<p>\u0130lk komut ikili dosyay\u0131 kopyalar, ikinci komut ise ona \u00e7al\u0131\u015ft\u0131rma izni verir. Art\u0131k terminalinizden do\u011frudan <code>benim_uygulamam<\/code> yazarak program\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<h3>Go Program\u0131n\u0131 Systemd Servisi Olarak \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Sunucu taraf\u0131 uygulamalar veya arka plan servisleri i\u00e7in, Go program\u0131n\u0131z\u0131n sistem ba\u015flang\u0131c\u0131nda otomatik olarak ba\u015flamas\u0131n\u0131 ve sorunlar kar\u015f\u0131s\u0131nda yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flamak istersiniz. Linux&#8217;ta bunun en yayg\u0131n yolu <code>systemd<\/code> kullanmakt\u0131r.<\/p>\n<p>Bir Go uygulamas\u0131n\u0131 systemd servisi olarak yap\u0131land\u0131rmak i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyebilirsiniz:<\/p>\n<ol>\n<li><strong>Servis Dosyas\u0131 Olu\u015fturun:<\/strong> <code>\/etc\/systemd\/system\/<\/code> dizininde bir <code>.service<\/code> dosyas\u0131 olu\u015fturun. \u00d6rne\u011fin, <code>benimuygulamam.service<\/code>:\n<pre><code>sudo nano \/etc\/systemd\/system\/benimuygulamam.service<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olabilir:<\/p>\n<pre><code><pre><code>[Unit]\nDescription=Benim Go Uygulama Servisim\nAfter=network.target\n\n[Service]\nUser=go_user\nGroup=go_user\nWorkingDirectory=\/opt\/benimuygulamam\nExecStart=\/opt\/benimuygulamam\/benim_uygulamam\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n<p><\/code><\/p>\n<p>A\u00e7\u0131klamalar:<\/p>\n<ul>\n<li><code>Description<\/code>: Servisin k\u0131sa a\u00e7\u0131klamas\u0131.<\/li>\n<li><code>After=network.target<\/code>: A\u011f servisleri ba\u015flad\u0131ktan sonra bu servisin ba\u015flamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>User<\/code> ve <code>Group<\/code>: Servisin hangi kullan\u0131c\u0131 ve grup alt\u0131nda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir (g\u00fcvenlik i\u00e7in ayr\u0131 bir kullan\u0131c\u0131 olu\u015fturmak iyi bir pratiktir).<\/li>\n<li><code>WorkingDirectory<\/code>: Uygulaman\u0131n \u00e7al\u0131\u015faca\u011f\u0131 dizin.<\/li>\n<li><code>ExecStart<\/code>: Uygulaman\u0131n \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131 komutun tam yolu.<\/li>\n<li><code>Restart=always<\/code>: Uygulama herhangi bir nedenle durursa otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>RestartSec=5<\/code>: Yeniden ba\u015flatmadan \u00f6nce 5 saniye bekler.<\/li>\n<li><code>WantedBy=multi-user.target<\/code>: Sistem \u00e7ok kullan\u0131c\u0131l\u0131 moda ge\u00e7ti\u011finde servisin etkinle\u015ftirilmesini sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Kullan\u0131c\u0131 ve Dizin Olu\u015fturun:<\/strong> E\u011fer belirtilen kullan\u0131c\u0131y\u0131 ve \u00e7al\u0131\u015fma dizinini olu\u015fturmad\u0131ysan\u0131z, bunu yap\u0131n:\n<pre><code>sudo useradd -r -s \/bin\/false go_user\nsudo mkdir -p \/opt\/benimuygulamam\nsudo cp benim_uygulamam \/opt\/benimuygulamam\/\nsudo chown -R go_user:go_user \/opt\/benimuygulamam<\/code><\/pre>\n<\/li>\n<li><strong>Servisi Etkinle\u015ftirin ve Ba\u015flat\u0131n:<\/strong>\n<pre><code>sudo systemctl daemon-reload       # systemd yap\u0131land\u0131rmas\u0131n\u0131 yeniden y\u00fckle\nsudo systemctl enable benimuygulamam # Servisi sistem ba\u015flang\u0131c\u0131nda etkinle\u015ftir\nsudo systemctl start benimuygulamam  # Servisi \u015fimdi ba\u015flat\nsudo systemctl status benimuygulamam # Servisin durumunu kontrol et<\/code><\/pre>\n<p>Bu ad\u0131mlarla, Go uygulaman\u0131z art\u0131k bir sistem servisi olarak \u00e7al\u0131\u015facak ve sunucunuz yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flayacakt\u0131r.<\/p>\n<\/li>\n<\/ol>\n<h3>Paketleme ve Da\u011f\u0131t\u0131m Y\u00f6ntemleri: Docker ile Konteynerizasyon<\/h3>\n<p>Modern yaz\u0131l\u0131m da\u011f\u0131t\u0131m\u0131n\u0131n en pop\u00fcler yollar\u0131ndan biri Docker konteynerleridir. Go&#8217;nun tek ikili dosya \u00e7\u0131kt\u0131s\u0131 vermesi, Docker imajlar\u0131n\u0131 son derece k\u00fc\u00e7\u00fck ve verimli hale getirmeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Bir Go uygulamas\u0131n\u0131 Docker ile konteynerize etmek i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyebilirsiniz:<\/p>\n<ol>\n<li><strong><code>Dockerfile<\/code> Olu\u015fturun:<\/strong> Proje dizininizde <code>Dockerfile<\/code> ad\u0131nda bir dosya olu\u015fturun:\n<pre><code>nano Dockerfile<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olabilir (\u00e7ok a\u015famal\u0131 derleme kullanarak k\u00fc\u00e7\u00fck bir imaj elde ederiz):<\/p>\n<pre><code><pre><code># Builder a\u015famas\u0131\nFROM golang:1.22 AS builder\nWORKDIR \/app\nCOPY . .\nRUN go mod download\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o benim_uygulamam .\n\n# \u00c7al\u0131\u015fma a\u015famas\u0131\nFROM alpine:latest\nWORKDIR \/root\/\nCOPY --from=builder \/app\/benim_uygulamam .\nEXPOSE 8080\nCMD [\".\/benim_uygulamam\"]\n<\/code><\/pre>\n<p><\/code><\/p>\n<p>Bu <code>Dockerfile<\/code>, Go uygulaman\u0131z\u0131 derlemek i\u00e7in bir <code>golang<\/code> imaj\u0131 kullan\u0131r, ard\u0131ndan derlenmi\u015f ikili dosyay\u0131 \u00e7ok daha k\u00fc\u00e7\u00fck olan <code>alpine<\/code> imaj\u0131na kopyalar. Bu sayede nihai Docker imaj\u0131n\u0131z\u0131n boyutu minimal kal\u0131r.<\/p>\n<\/li>\n<li><strong>Docker \u0130maj\u0131n\u0131 Olu\u015fturun:<\/strong> Proje dizininizdeyken (<code>Dockerfile<\/code>&#8216;\u0131n bulundu\u011fu yer), imaj\u0131 olu\u015fturun:\n<pre><code>docker build -t benim-go-uygulamam:latest .<\/code><\/pre>\n<\/li>\n<li><strong>Docker Konteynerini \u00c7al\u0131\u015ft\u0131r\u0131n:<\/strong>\n<pre><code>docker run -p 8080:8080 benim-go-uygulamam:latest<\/code><\/pre>\n<p>Bu komut, imaj\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r ve konteynerin 8080 portunu ana makinenin 8080 portuna e\u015fler.<\/p>\n<\/li>\n<\/ol>\n<h3>Vaka Analizi: Mobil API Servisi ve Responsive Tasar\u0131m<\/h3>\n<p>Bir Go tabanl\u0131 REST API servisi geli\u015ftirdi\u011finizi d\u00fc\u015f\u00fcn\u00fcn. Bu servis, hem mobil uygulamalar hem de web siteleri i\u00e7in veri sa\u011fl\u0131yor. Go program\u0131n\u0131z\u0131 systemd ile sunucuda s\u00fcrekli \u00e7al\u0131\u015f\u0131r halde tutabilir, b\u00f6ylece API isteklerine her zaman yan\u0131t verebilir. Ancak, bu API&#8217;yi t\u00fcketen mobil ve web istemcilerinin de kullan\u0131c\u0131 dostu ve mobil uyumlu olmas\u0131 gerekir.<\/p>\n<p>Go backend&#8217;i, JSON veya gRPC gibi formatlarda veri sa\u011flayarak mobil ve web frontend&#8217;lerine hizmet eder. Frontend geli\u015ftiricileri (\u00f6rne\u011fin React, Vue.js, Swift, Kotlin kullananlar), bu veriyi kullanarak kendi aray\u00fczlerini olu\u015fturur. Burada, mobil uyumlu HTML (responsive design) devreye girer. Go backend&#8217;i do\u011frudan HTML \u00fcretmese de, API&#8217;sini t\u00fcketen web uygulamalar\u0131 i\u00e7in responsive tasar\u0131m kritik \u00f6neme sahiptir. \u00d6rne\u011fin, bir web frontend&#8217;i a\u015fa\u011f\u0131daki gibi medya sorgular\u0131 (media queries) kullanarak farkl\u0131 ekran boyutlar\u0131na uyum sa\u011flayabilir:<\/p>\n<pre><code><pre><code>@media (max-width: 768px) {\n    .container {\n        width: 100%;\n        padding: 10px;\n    }\n    .sidebar {\n        display: none;\n    }\n}\n\n@media (min-width: 769px) and (max-width: 1024px) {\n    .container {\n        width: 90%;\n        margin: 0 auto;\n    }\n    .sidebar {\n        width: 25%;\n        float: left;\n    }\n    .main-content {\n        width: 70%;\n        float: right;\n    }\n}\n<\/code><\/pre>\n<p><\/code><\/p>\n<p>Bu CSS medya sorgular\u0131, Go API&#8217;sinden gelen veriyi g\u00f6steren bir web sayfas\u0131n\u0131n, ekran geni\u015fli\u011fine g\u00f6re farkl\u0131 d\u00fczenler almas\u0131n\u0131 sa\u011flar. Go backend&#8217;i, bu frontend&#8217;in ihtiya\u00e7 duydu\u011fu veriyi g\u00fcvenilir ve h\u0131zl\u0131 bir \u015fekilde sunarak, kullan\u0131c\u0131 deneyiminin temelini olu\u015fturur. Docker kullan\u0131m\u0131 ise bu Go API servisinin farkl\u0131 sunuculara h\u0131zl\u0131 ve tutarl\u0131 bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayarak operasyonel esnekli\u011fi art\u0131r\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey Go Derleme ve Optimizasyon Teknikleri Nelerdir?<\/h2>\n<p>Go programlar\u0131n\u0131 temel d\u00fczeyde derlemeyi ve kurmay\u0131 \u00f6\u011frendikten sonra, s\u0131ra daha deneyimli kullan\u0131c\u0131lar i\u00e7in \u00f6nemli olabilecek ileri d\u00fczey tekniklere gelir. Bu b\u00f6l\u00fcmde, derlenmi\u015f ikili dosyalar\u0131n boyutunu k\u00fc\u00e7\u00fcltmekten performans optimizasyonuna, CGO kullan\u0131m\u0131 ve g\u00fcvenlik hususlar\u0131na kadar \u00e7e\u015fitli konular\u0131 ele alaca\u011f\u0131z. Ayr\u0131ca, modern geli\u015ftirme s\u00fcre\u00e7lerinin vazge\u00e7ilmezi olan s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) entegrasyonuna da de\u011finece\u011fiz.<\/p>\n<h3>Derleme Boyutunu K\u00fc\u00e7\u00fcltme<\/h3>\n<p>Go&#8217;nun derledi\u011fi ikili dosyalar bazen di\u011fer dillere g\u00f6re daha b\u00fcy\u00fck olabilir, \u00e7\u00fcnk\u00fc t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve \u00e7al\u0131\u015fma zaman\u0131 (runtime) bile\u015fenlerini tek bir dosyaya paketler. Ancak, \u00f6zellikle kaynak k\u0131s\u0131tl\u0131 ortamlar (IoT cihazlar\u0131, konteynerler) i\u00e7in bu boyutu k\u00fc\u00e7\u00fcltmek m\u00fcmk\u00fcnd\u00fcr. <code>-ldflags<\/code> (linker flags) bayra\u011f\u0131n\u0131 kullanarak sembol tablolar\u0131n\u0131 ve hata ay\u0131klama bilgilerini kald\u0131rabilirsiniz:<\/p>\n<pre><code>go build -ldflags=\"-s -w\" -o kucuk_uygulama main.go<\/code><\/pre>\n<ul>\n<li><code>-s<\/code>: Sembol tablosunu kald\u0131r\u0131r.<\/li>\n<li><code>-w<\/code>: Hata ay\u0131klama bilgilerini kald\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Bu bayraklar, derlenmi\u015f dosyan\u0131n boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde azaltabilir. Ayr\u0131ca, Docker konteynerlerinde yukar\u0131da bahsetti\u011fimiz gibi \u00e7ok a\u015famal\u0131 derleme (multi-stage build) kullanarak da nihai imaj boyutunu minimumda tutabilirsiniz.<\/p>\n<h3>Performans Optimizasyonu: Profilleme (pprof)<\/h3>\n<p>Go, yerle\u015fik bir profilleme arac\u0131 olan <code>pprof<\/code> ile birlikte gelir. Bu ara\u00e7, uygulaman\u0131z\u0131n CPU, bellek, bloklama ve goroutine kullan\u0131m\u0131 gibi performans metriklerini analiz etmenizi sa\u011flar. Performans darbo\u011fazlar\u0131n\u0131 tespit etmek ve optimize etmek i\u00e7in pprof&#8217;u kullanmak \u00e7ok de\u011ferlidir.<\/p>\n<p>Basit bir web uygulamas\u0131na pprof entegre etmek i\u00e7in:<\/p>\n<pre><code><pre><code>package main\n\nimport (\n    \"fmt\"\n    \"log\"\n    \"net\/http\"\n    _ \"net\/http\/pprof\" \/\/ pprof endpointlerini ekler\n)\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n    fmt.Fprintf(w, \"Merhaba, performansl\u0131 d\u00fcnya!\")\n}\n\nfunc main() {\n    http.HandleFunc(\"\/\", handler)\n    log.Fatal(http.ListenAndServe(\":8080\", nil))\n}\n<\/code><\/pre>\n<p><\/code><\/p>\n<p>Uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:8080\/debug\/pprof\/<\/code> adresine giderek \u00e7e\u015fitli profilleme verilerine ula\u015fabilirsiniz. Daha detayl\u0131 analizler i\u00e7in <code>go tool pprof<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code>go tool pprof http:\/\/localhost:8080\/debug\/pprof\/heap    # Bellek profili\ngo tool pprof http:\/\/localhost:8080\/debug\/pprof\/cpu     # CPU profili<\/code><\/pre>\n<p>Bu ara\u00e7, uygulaman\u0131z\u0131n hangi k\u0131s\u0131mlar\u0131n\u0131n en \u00e7ok kaynak t\u00fcketti\u011fini g\u00f6rselle\u015ftirmenize yard\u0131mc\u0131 olur, b\u00f6ylece hedefli optimizasyonlar yapabilirsiniz.<\/p>\n<h3>CGO Kullan\u0131m\u0131 ve Statik\/Dinamik Ba\u011flant\u0131<\/h3>\n<p>Go, C kodunu Go programlar\u0131 i\u00e7inde kullanman\u0131za olanak tan\u0131yan <code>CGO<\/code> adl\u0131 bir mekanizmaya sahiptir. Bu, \u00f6zellikle mevcut C k\u00fct\u00fcphanelerini Go projenize entegre etmek istedi\u011finizde veya belirli donan\u0131m aray\u00fczleriyle d\u00fc\u015f\u00fck seviyeli etkile\u015fimler gerekti\u011finde kullan\u0131\u015fl\u0131d\u0131r. Ancak CGO kullanmak, derleme s\u00fcrecini karma\u015f\u0131kla\u015ft\u0131rabilir ve \u00e7apraz derlemeyi zorla\u015ft\u0131rabilir.<\/p>\n<p>CGO&#8217;lu bir Go program\u0131 derlerken, varsay\u0131lan olarak dinamik ba\u011flant\u0131 (dynamic linking) kullan\u0131l\u0131r, yani program\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in sistemde ilgili C k\u00fct\u00fcphanelerinin bulunmas\u0131 gerekir. E\u011fer tamamen ba\u011f\u0131ms\u0131z bir ikili dosya istiyorsan\u0131z, statik ba\u011flant\u0131 (static linking) kullanman\u0131z gerekir. Bunu <code>CGO_ENABLED=0<\/code> ortam de\u011fi\u015fkenini ayarlayarak CGO&#8217;yu devre d\u0131\u015f\u0131 b\u0131rakabilir veya CGO&#8217;lu bir program i\u00e7in derleme s\u0131ras\u0131nda <code>-ldflags=\"-extldflags=-static\"<\/code> gibi bayraklar kullanabilirsiniz (ancak bu, t\u00fcm C k\u00fct\u00fcphanelerinin statik s\u00fcr\u00fcmlerinin sistemde bulunmas\u0131n\u0131 gerektirir ve karma\u015f\u0131kt\u0131r).<\/p>\n<pre><code>CGO_ENABLED=0 go build -o benim_bagimsiz_uygulamam main.go<\/code><\/pre>\n<p><code>CGO_ENABLED=0<\/code> genellikle Go derleyicisinin CGO&#8217;ya ba\u011f\u0131ml\u0131 olmayan saf Go kodu \u00fcretmesini sa\u011flar, bu da daha k\u00fc\u00e7\u00fck ve daha ta\u015f\u0131nabilir ikili dosyalarla sonu\u00e7lan\u0131r.<\/p>\n<h3>G\u00fcvenlik Hususlar\u0131 ve Yaz\u0131l\u0131m Tedarik Zinciri<\/h3>\n<p>Go programlar\u0131 geli\u015ftirirken g\u00fcvenlik de \u00f6nemli bir fakt\u00f6rd\u00fcr. Kullan\u0131lan \u00fc\u00e7\u00fcnc\u00fc taraf ba\u011f\u0131ml\u0131l\u0131klar\u0131n g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 i\u00e7ermedi\u011finden emin olmak hayati \u00f6nem ta\u015f\u0131r. Go mod\u00fclleri, <code>go.sum<\/code> dosyas\u0131 ile ba\u011f\u0131ml\u0131l\u0131klar\u0131n b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc kontrol etse de, g\u00fcvenlik taramalar\u0131 i\u00e7in ek ara\u00e7lar kullanmak faydal\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131k Taramas\u0131:<\/strong> <code>govulncheck<\/code> gibi ara\u00e7lar, projenizdeki ba\u011f\u0131ml\u0131l\u0131klar\u0131n bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 taraman\u0131za yard\u0131mc\u0131 olur.<\/li>\n<li><strong>G\u00fcvenli Kodlama Pratikleri:<\/strong> G\u00fcvenli kod yazma al\u0131\u015fkanl\u0131klar\u0131 edinmek (girdi do\u011frulama, hata y\u00f6netimi, \u015fifreleme kullan\u0131m\u0131) \u00f6nemlidir.<\/li>\n<li><strong>Yaz\u0131l\u0131m Tedarik Zinciri G\u00fcvenli\u011fi:<\/strong> Derleme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizde kullan\u0131lan t\u00fcm ara\u00e7lar\u0131n ve imajlar\u0131n g\u00fcvenli oldu\u011fundan emin olun. \u00d6rne\u011fin, Docker imajlar\u0131 i\u00e7in g\u00fcvenilir temel imajlar kullan\u0131n ve imaj tarama ara\u00e7lar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<\/ul>\n<h3>Otomatik Derleme ve CI\/CD Entegrasyonu<\/h3>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme, s\u00fcrekli entegrasyon (CI) ve s\u00fcrekli da\u011f\u0131t\u0131m (CD) yakla\u015f\u0131mlar\u0131n\u0131 benimser. Go projeleri, bu t\u00fcr otomasyon boru hatlar\u0131na (pipelines) m\u00fckemmel bir \u015fekilde entegre edilebilir.<\/p>\n<p>Bir CI\/CD boru hatt\u0131nda Go projeleri i\u00e7in tipik ad\u0131mlar \u015funlar\u0131 i\u00e7erebilir:<\/p>\n<ol>\n<li><strong>Kod \u00c7ekme:<\/strong> Kaynak kod deposundan (Git, SVN) en son kodu \u00e7ekme.<\/li>\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 \u0130ndirme:<\/strong> <code>go mod download<\/code> komutu ile proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 indirme.<\/li>\n<li><strong>Testleri \u00c7al\u0131\u015ft\u0131rma:<\/strong> <code>go test .\/...<\/code> komutu ile birim ve entegrasyon testlerini \u00e7al\u0131\u015ft\u0131rma.<\/li>\n<li><strong>Kod Kalitesi Kontrol\u00fc:<\/strong> <code>golint<\/code>, <code>go vet<\/code> gibi ara\u00e7larla kod kalitesini ve olas\u0131 sorunlar\u0131 kontrol etme.<\/li>\n<li><strong>Derleme:<\/strong> <code>go build<\/code> komutu ile projenin ikili dosyas\u0131n\u0131 derleme (gerekirse \u00e7apraz derleme ile birden fazla platform i\u00e7in).<\/li>\n<li><strong>Da\u011f\u0131t\u0131m:<\/strong> Derlenmi\u015f ikili dosyay\u0131 veya Docker imaj\u0131n\u0131 hedef sunuculara, konteyner kay\u0131t defterine (Docker Registry) veya bulut platformlar\u0131na da\u011f\u0131tma.<\/li>\n<\/ol>\n<p>Jenkins, GitLab CI, GitHub Actions, Travis CI gibi ara\u00e7lar, bu s\u00fcre\u00e7leri otomatikle\u015ftirmek i\u00e7in kullan\u0131labilir. \u00d6rne\u011fin, bir GitHub Actions i\u015f ak\u0131\u015f\u0131 (workflow) a\u015fa\u011f\u0131daki gibi g\u00f6r\u00fcnebilir:<\/p>\n<pre><code><pre><code>name: Go CI\/CD\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions\/checkout@v4\n\n    - name: Set up Go\n      uses: actions\/setup-go@v5\n      with:\n        go-version: '1.22'\n\n    - name: Download Go modules\n      run: go mod download\n\n    - name: Build\n      run: CGO_ENABLED=0 GOOS=linux go build -ldflags=\"-s -w\" -o myapp .\n\n    - name: Test\n      run: go test -v .\/...\n\n    - name: Upload artifact\n      uses: actions\/upload-artifact@v4\n      with:\n        name: myapp-linux-amd64\n        path: myapp\n<\/code><\/pre>\n<p><\/code><\/p>\n<p>Bu i\u015f ak\u0131\u015f\u0131, her kod itme (push) veya \u00e7ekme iste\u011fi (pull request) \u00fczerinde Go projesini otomatik olarak derler, test eder ve derlenmi\u015f ikili dosyay\u0131 bir yap\u0131t (artifact) olarak kaydeder. Bu sayede, geli\u015ftirme s\u00fcreciniz daha h\u0131zl\u0131, daha g\u00fcvenilir ve daha tutarl\u0131 hale gelir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, Go programlar\u0131n\u0131 Linux \u00fczerinde s\u0131f\u0131rdan kurmaktan, derlemeye, da\u011f\u0131tmaya ve ileri d\u00fczey optimizasyon tekniklerine kadar kapsaml\u0131 bir yolculuk yapt\u0131k. Go&#8217;nun basitli\u011fi, performans\u0131 ve e\u015fzamanl\u0131l\u0131k yeteneklerinin, Linux&#8217;un sa\u011flam ve esnek ortam\u0131yla birle\u015fti\u011finde ortaya \u00e7\u0131kard\u0131\u011f\u0131 g\u00fcc\u00fc detayl\u0131 bir \u015fekilde inceledik. Geli\u015ftirme ortam\u0131 kurulumundan, \u00e7apraz derlemeye, systemd ile servis y\u00f6netimine ve Docker ile konteynerizasyona kadar bir\u00e7ok \u00f6nemli konuya de\u011findik. Ayr\u0131ca, derlenmi\u015f ikili dosyalar\u0131n boyutunu k\u00fc\u00e7\u00fcltmek, pprof ile performans analizi yapmak ve CI\/CD s\u00fcre\u00e7lerine entegrasyon gibi ileri d\u00fczey teknikleri de ke\u015ffettik.<\/p>\n<p>Go&#8217;nun tek bir ba\u011f\u0131ms\u0131z ikili dosya \u00fcretme \u00f6zelli\u011fi, Linux tabanl\u0131 sunucu ve bulut ortamlar\u0131nda da\u011f\u0131t\u0131m\u0131 son derece kolayla\u015ft\u0131r\u0131r. Bu, \u00f6zellikle mikroservis mimarileri ve y\u00fcksek performans gerektiren a\u011f servisleri i\u00e7in Go&#8217;yu vazge\u00e7ilmez bir se\u00e7enek haline getirir. Go mod\u00fclleri sayesinde ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi de basitle\u015fmi\u015f, geli\u015ftiricilerin daha \u00e7ok i\u015flevselli\u011fe odaklanmas\u0131n\u0131 sa\u011flam\u0131\u015ft\u0131r. G\u00fcvenlik ve performans optimizasyonlar\u0131 i\u00e7in sunulan yerle\u015fik ara\u00e7lar ve modern CI\/CD entegrasyon yetenekleri ise Go&#8217;yu g\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri i\u00e7in ideal bir dil konumuna ta\u015f\u0131maktad\u0131r.<\/p>\n<p>Umar\u0131z bu rehber, Go programlar\u0131n\u0131z\u0131 Linux \u00fczerinde ba\u015far\u0131yla geli\u015ftirmeniz, derlemeniz ve da\u011f\u0131tman\u0131z i\u00e7in size sa\u011flam bir temel sa\u011flam\u0131\u015ft\u0131r. Go toplulu\u011fu s\u00fcrekli b\u00fcy\u00fcmekte ve yeni ara\u00e7lar ve en iyi uygulamalar ortaya \u00e7\u0131kmaktad\u0131r. Bu dinamik ekosistemi takip etmek, Go ile olan yeteneklerinizi daha da geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r. \u015eimdi, Go&#8217;nun ve Linux&#8217;un g\u00fcc\u00fcn\u00fc kullanarak kendi projelerinizi hayata ge\u00e7irme zaman\u0131!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>1. Go programlar\u0131n\u0131 derlerken neden <code>go run<\/code> yerine <code>go build<\/code> kullanmal\u0131y\u0131m?<\/dt>\n<dd>\n<p><code>go run<\/code> komutu, kaynak kodunu derler ve hemen \u00e7al\u0131\u015ft\u0131r\u0131r, ancak derlenmi\u015f bir ikili dosya olu\u015fturmaz. Bu, geli\u015ftirme a\u015famas\u0131nda h\u0131zl\u0131 testler yapmak i\u00e7in idealdir. Buna kar\u015f\u0131l\u0131k, <code>go build<\/code> komutu kaynak kodunu derler ve kal\u0131c\u0131 bir \u00e7al\u0131\u015ft\u0131r\u0131labilir ikili dosya olu\u015fturur. Bu ikili dosya, ba\u011f\u0131ms\u0131z olarak da\u011f\u0131t\u0131labilir ve \u00e7al\u0131\u015ft\u0131r\u0131labilir. Dolay\u0131s\u0131yla, bir Go program\u0131n\u0131 da\u011f\u0131tmak veya bir sunucuda kal\u0131c\u0131 olarak \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizde <code>go build<\/code> kullanmal\u0131s\u0131n\u0131z.<\/p>\n<\/dd>\n<dt>2. <code>GOPATH<\/code> ne i\u015fe yarar ve hala gerekli mi?<\/dt>\n<dd>\n<p><code>GOPATH<\/code>, Go 1.11 \u00f6ncesinde Go projelerinin, kaynak kodlar\u0131n\u0131n, derlenmi\u015f ikili dosyalar\u0131n ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n depoland\u0131\u011f\u0131 bir \u00e7al\u0131\u015fma alan\u0131 diziniydi. Go 1.11 ile birlikte tan\u0131t\u0131lan Go mod\u00fclleri, projelerin <code>GOPATH<\/code> d\u0131\u015f\u0131nda da ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131d\u0131\u011f\u0131 i\u00e7in <code>GOPATH<\/code>&#8216;\u0131n zorunlulu\u011funu b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ortadan kald\u0131rm\u0131\u015ft\u0131r. Modern Go projeleri genellikle Go mod\u00fclleriyle y\u00f6netilir ve <code>GOPATH<\/code>&#8216;a ihtiya\u00e7 duymaz. Ancak, baz\u0131 eski ara\u00e7lar veya projeler hala <code>GOPATH<\/code>&#8216;a ba\u011f\u0131ml\u0131 olabilir, bu nedenle ayarlanmas\u0131 bazen faydal\u0131 olabilir.<\/p>\n<\/dd>\n<dt>3. \u00c7apraz derleme (cross-compilation) yaparken dikkat etmem gerekenler nelerdir?<\/dt>\n<dd>\n<p>\u00c7apraz derleme (<code>GOOS<\/code> ve <code>GOARCH<\/code> ortam de\u011fi\u015fkenleriyle) Go&#8217;nun g\u00fc\u00e7l\u00fc bir \u00f6zelli\u011fidir. Ancak dikkat etmeniz gereken baz\u0131 noktalar vard\u0131r:<\/p>\n<ul>\n<li><strong>CGO Ba\u011f\u0131ml\u0131l\u0131klar\u0131:<\/strong> E\u011fer Go projeniz CGO (C kodu ile etkile\u015fim) kullan\u0131yorsa, \u00e7apraz derleme karma\u015f\u0131kla\u015fabilir. Genellikle <code>CGO_ENABLED=0<\/code> ayarlanarak CGO devre d\u0131\u015f\u0131 b\u0131rak\u0131l\u0131r, ancak bu durumda CGO&#8217;ya ba\u011f\u0131ml\u0131 k\u00fct\u00fcphaneleri kullanamazs\u0131n\u0131z.<\/li>\n<li><strong>Statik Ba\u011flant\u0131:<\/strong> \u00c7apraz derlenmi\u015f ikili dosyan\u0131n hedef sistemde ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in genellikle t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n statik olarak ba\u011flanmas\u0131 tercih edilir.<\/li>\n<li><strong>Hedef Ortam\u0131n \u00d6zellikleri:<\/strong> Hedef sistemin mimarisine (ARM, AMD64 vb.) ve i\u015fletim sistemine (Linux, Windows, Darwin) do\u011fru \u015fekilde derledi\u011finizden emin olun.<\/li>\n<\/ul>\n<\/dd>\n<dt>4. Go program\u0131m\u0131 Linux&#8217;ta bir servis olarak nas\u0131l otomatik ba\u015flat\u0131r\u0131m?<\/dt>\n<dd>\n<p>Go program\u0131n\u0131z\u0131 Linux&#8217;ta bir servis olarak otomatik ba\u015flatman\u0131n en yayg\u0131n ve \u00f6nerilen yolu <code>systemd<\/code> kullanmakt\u0131r. Yukar\u0131daki &#8220;Go Program\u0131n\u0131 Systemd Servisi Olarak \u00c7al\u0131\u015ft\u0131rma&#8221; b\u00f6l\u00fcm\u00fcnde detayl\u0131 olarak a\u00e7\u0131kland\u0131\u011f\u0131 gibi, <code>\/etc\/systemd\/system\/<\/code> dizininde bir <code>.service<\/code> dosyas\u0131 olu\u015fturman\u0131z, program\u0131n\u0131z\u0131n yolunu, \u00e7al\u0131\u015faca\u011f\u0131 kullan\u0131c\u0131y\u0131 ve otomatik ba\u015flatma ayarlar\u0131n\u0131 belirtmeniz gerekir. Ard\u0131ndan <code>systemctl enable<\/code> ve <code>systemctl start<\/code> komutlar\u0131yla servisi etkinle\u015ftirip ba\u015flatabilirsiniz.<\/p>\n<\/dd>\n<dt>5. Derlenmi\u015f Go ikili dosyas\u0131n\u0131n boyutunu nas\u0131l k\u00fc\u00e7\u00fcltebilirim?<\/dt>\n<dd>\n<p>Derlenmi\u015f Go ikili dosyas\u0131n\u0131n boyutunu k\u00fc\u00e7\u00fcltmek i\u00e7in birka\u00e7 y\u00f6ntem bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong><code>-ldflags=\"-s -w\"<\/code> Kullan\u0131m\u0131:<\/strong> Bu derleyici bayraklar\u0131, sembol tablolar\u0131n\u0131 ve hata ay\u0131klama bilgilerini kald\u0131rarak dosya boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/li>\n<li><strong><code>CGO_ENABLED=0<\/code>:<\/strong> E\u011fer projenizde CGO kullanm\u0131yorsan\u0131z, bu ortam de\u011fi\u015fkenini ayarlayarak Go&#8217;nun saf Go kodu derlemesini sa\u011flayabilir ve bu da genellikle daha k\u00fc\u00e7\u00fck ikili dosyalarla sonu\u00e7lan\u0131r.<\/li>\n<li><strong>Minimal Temel \u0130majlar (Docker \u0130\u00e7in):<\/strong> Docker kullan\u0131yorsan\u0131z, \u00e7ok a\u015famal\u0131 derleme (multi-stage build) ile Go uygulaman\u0131z\u0131 derleyip, derlenmi\u015f ikili dosyay\u0131 <code>alpine<\/code> gibi \u00e7ok daha k\u00fc\u00e7\u00fck bir temel imaja kopyalayarak nihai Docker imaj\u0131n\u0131n boyutunu minimuma indirebilirsiniz.<\/li>\n<\/ul>\n<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Linux&#8217;ta Go Programlar\u0131 Derleme ve Kurulum Rehberi Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[241],"tags":[],"class_list":{"0":"post-41357","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-linux","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?<\/title>\n<meta name=\"description\" content=\"Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber mi ar\u0131yorsunuz? Go geli\u015ftirme ortam\u0131n\u0131 kurmaktan ileri seviye optimizasyonlara kadar t\u00fcm ad\u0131mlar\u0131 ke\u015ffedin.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?\" \/>\n<meta property=\"og:description\" content=\"Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber mi ar\u0131yorsunuz? Go geli\u015ftirme ortam\u0131n\u0131 kurmaktan ileri seviye optimizasyonlara kadar t\u00fcm ad\u0131mlar\u0131 ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-15T11:05:41+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?\",\"datePublished\":\"2026-04-15T11:05:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/\"},\"wordCount\":5106,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Linux\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/\",\"name\":\"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-04-15T11:05:41+00:00\",\"description\":\"Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber mi ar\u0131yorsunuz? Go geli\u015ftirme ortam\u0131n\u0131 kurmaktan ileri seviye optimizasyonlara kadar t\u00fcm ad\u0131mlar\u0131 ke\u015ffedin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?","description":"Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber mi ar\u0131yorsunuz? Go geli\u015ftirme ortam\u0131n\u0131 kurmaktan ileri seviye optimizasyonlara kadar t\u00fcm ad\u0131mlar\u0131 ke\u015ffedin.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/","og_locale":"tr_TR","og_type":"article","og_title":"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?","og_description":"Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber mi ar\u0131yorsunuz? Go geli\u015ftirme ortam\u0131n\u0131 kurmaktan ileri seviye optimizasyonlara kadar t\u00fcm ad\u0131mlar\u0131 ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-04-15T11:05:41+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?","datePublished":"2026-04-15T11:05:41+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/"},"wordCount":5106,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Linux"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/","url":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/","name":"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-04-15T11:05:41+00:00","description":"Linux \u00fczerinde Go programlar\u0131 derlemek ve kurmak i\u00e7in kapsaml\u0131 bir rehber mi ar\u0131yorsunuz? Go geli\u015ftirme ortam\u0131n\u0131 kurmaktan ileri seviye optimizasyonlara kadar t\u00fcm ad\u0131mlar\u0131 ke\u015ffedin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/go-dili-neden-tercih-edilmeli-ve-linux-ortaminda-nasil-bir-avantaj-saglar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Go Dili Neden Tercih Edilmeli ve Linux Ortam\u0131nda Nas\u0131l Bir Avantaj Sa\u011flar?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41357","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=41357"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41357\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41357"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}