{"id":39135,"date":"2026-02-15T05:40:46","date_gmt":"2026-02-15T02:40:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39135"},"modified":"2026-02-15T05:40:46","modified_gmt":"2026-02-15T02:40:46","slug":"ozel-go-modullerini-kendi-projenizde-kullanma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/","title":{"rendered":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi<\/h2>\n<p>Go dili, basitli\u011fi, performans\u0131 ve g\u00fc\u00e7l\u00fc e\u015fzamanl\u0131l\u0131k yetenekleriyle modern yaz\u0131l\u0131m geli\u015ftirmede h\u0131zla pop\u00fclerlik kazanm\u0131\u015ft\u0131r. Go ekosisteminin temel ta\u015flar\u0131ndan biri de mod\u00fcllerdir. Mod\u00fcller, kodun yeniden kullan\u0131labilirli\u011fini art\u0131ran, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmeyi kolayla\u015ft\u0131ran ve projeleri daha d\u00fczenli hale getiren bir mekanizmad\u0131r. \u00c7o\u011fu zaman a\u00e7\u0131k kaynakl\u0131 mod\u00fclleri kullan\u0131r\u0131z, ancak kurumsal ortamlarda veya \u00f6zel projelerde kendi geli\u015ftirdi\u011fimiz veya eri\u015fimi k\u0131s\u0131tl\u0131 olan \u00f6zel (private) Go mod\u00fcllerine ihtiya\u00e7 duyar\u0131z. Bu \u00f6zel mod\u00fcller, fikri m\u00fclkiyetimizi korumak, dahili ara\u00e7lar\u0131 payla\u015fmak veya belirli g\u00fcvenlik gereksinimlerini kar\u015f\u0131lamak i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<p>Ancak, \u00f6zel Go mod\u00fcllerini kendi projelerinize dahil etmek, a\u00e7\u0131k kaynakl\u0131 mod\u00fclleri kullanmaktan biraz daha karma\u015f\u0131k olabilir. Go&#8217;nun varsay\u0131lan ba\u011f\u0131ml\u0131l\u0131k y\u00f6netim sistemi, mod\u00fcllere genellikle genel internet \u00fczerinden eri\u015filebilece\u011fini varsayar. Bu makale, \u00f6zel Go mod\u00fcllerini kendi projelerinizde sorunsuz bir \u015fekilde kullanabilmeniz i\u00e7in gerekli ad\u0131mlar\u0131, yap\u0131land\u0131rmalar\u0131 ve en iyi uygulamalar\u0131 ayr\u0131nt\u0131l\u0131 olarak ele alacakt\u0131r. Kimlik do\u011frulama mekanizmalar\u0131ndan ortam de\u011fi\u015fkenlerinin do\u011fru yap\u0131land\u0131r\u0131lmas\u0131na, s\u0131k kar\u015f\u0131la\u015f\u0131lan sorunlardan CI\/CD entegrasyonuna kadar her y\u00f6n\u00fcyle bu konuyu inceleyece\u011fiz.<\/p>\n<h3>Go Mod\u00fclleri ve Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimine Genel Bak\u0131\u015f<\/h3>\n<p>Go 1.11 ile birlikte tan\u0131t\u0131lan Go Mod\u00fclleri, Go projelerinde ba\u011f\u0131ml\u0131l\u0131k y\u00f6netiminin standart yolu haline gelmi\u015ftir. Bir Go mod\u00fcl\u00fc, s\u00fcr\u00fcm kontrol\u00fc alt\u0131nda olan ve birlikte versiyonlanan bir paket koleksiyonudur. Her mod\u00fcl\u00fcn k\u00f6k dizininde bir <code>go.mod<\/code> dosyas\u0131 bulunur ve bu dosya mod\u00fcl\u00fcn yolunu, gerektirdi\u011fi ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve Go s\u00fcr\u00fcm\u00fcn\u00fc tan\u0131mlar.<\/p>\n<p>*   <strong><code>go.mod<\/code>:<\/strong> Mod\u00fcl\u00fcn kendisini ve do\u011frudan ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 tan\u0131mlayan ana dosyad\u0131r. Mod\u00fcl yolu (\u00f6rne\u011fin, <code>github.com\/myuser\/mymodule<\/code>), <code>require<\/code> (gerektirilen mod\u00fcller ve versiyonlar\u0131), <code>exclude<\/code> (hari\u00e7 tutulan mod\u00fcller) ve <code>replace<\/code> (bir mod\u00fcl\u00fcn ba\u015fka bir mod\u00fclle de\u011fi\u015ftirilmesi) direktiflerini i\u00e7erir.<br \/>\n*   <strong><code>go.sum<\/code>:<\/strong> Mod\u00fcl ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n kriptografik \u00f6zetlerini (checksum) i\u00e7erir. Bu, indirilen ba\u011f\u0131ml\u0131l\u0131klar\u0131n b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve de\u011fi\u015fmedi\u011fini do\u011frulamak i\u00e7in kullan\u0131l\u0131r ve g\u00fcvenlik a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir.<br \/>\n*   <strong><code>go get<\/code>:<\/strong> Belirtilen bir paketi veya mod\u00fcl\u00fc indirir ve <code>go.mod<\/code> dosyas\u0131na ekler.<br \/>\n*   <strong><code>go mod tidy<\/code>:<\/strong> <code>go.mod<\/code> dosyas\u0131n\u0131 temizler, kullan\u0131lmayan ba\u011f\u0131ml\u0131l\u0131klar\u0131 kald\u0131r\u0131r ve eksik olanlar\u0131 ekler.<br \/>\n*   <strong><code>go build<\/code> \/ <code>go run<\/code>:<\/strong> Projeyi derler veya \u00e7al\u0131\u015ft\u0131r\u0131r. Bu komutlar, ba\u011f\u0131ml\u0131l\u0131klar\u0131 otomatik olarak \u00e7\u00f6zer ve indirir (e\u011fer \u00f6nbellekte yoksa).<\/p>\n<p>Go, mod\u00fclleri genellikle bir Go mod\u00fcl proxy&#8217;si (varsay\u0131lan olarak <code>proxy.golang.org<\/code>) arac\u0131l\u0131\u011f\u0131yla indirir. Bu proxy&#8217;ler, mod\u00fclleri \u00f6nbelle\u011fe alarak indirme h\u0131z\u0131n\u0131 art\u0131r\u0131r ve kararl\u0131l\u0131k sa\u011flar. Ancak \u00f6zel mod\u00fcller, proxy&#8217;ler taraf\u0131ndan eri\u015filemez oldu\u011fundan, bu mekanizman\u0131n nas\u0131l atlat\u0131laca\u011f\u0131n\u0131 bilmek gerekir.<\/p>\n<h3>\u00d6zel Go Mod\u00fcllerinin Bar\u0131nd\u0131r\u0131lmas\u0131<\/h3>\n<p>\u00d6zel Go mod\u00fclleri, genellikle Git tabanl\u0131 bir s\u00fcr\u00fcm kontrol sisteminde bar\u0131nd\u0131r\u0131l\u0131r. En yayg\u0131n se\u00e7enekler \u015funlard\u0131r:<\/p>\n<p>1.  <strong>GitHub Private Repositories:<\/strong> En pop\u00fcler se\u00e7eneklerden biridir. \u00d6zel depolar, belirli kullan\u0131c\u0131lara veya ekiplere eri\u015fim izni verir.<br \/>\n2.  <strong>GitLab Private Repositories:<\/strong> GitHub&#8217;a benzer \u015fekilde, GitLab da \u00f6zel depolar sunar ve genellikle \u015firket i\u00e7i kurulumlar i\u00e7in tercih edilir.<br \/>\n3.  <strong>Bitbucket Private Repositories:<\/strong> Atlassian ekosisteminin bir par\u00e7as\u0131 olarak, Bitbucket da \u00f6zel depolar i\u00e7in g\u00fc\u00e7l\u00fc se\u00e7enekler sunar.<br \/>\n4.  <strong>\u015eirket \u0130\u00e7i (Self-Hosted) Git Sunucular\u0131:<\/strong> Gitea, Gogs veya GitLab Community Edition gibi \u00e7\u00f6z\u00fcmlerle \u015firket i\u00e7inde kendi Git sunucunuzu bar\u0131nd\u0131rabilirsiniz. Bu, veri egemenli\u011fi ve \u00f6zel a\u011f entegrasyonu i\u00e7in idealdir.<\/p>\n<p>Bu platformlar, mod\u00fcllerinize eri\u015fimi kontrol etmek i\u00e7in SSH anahtarlar\u0131 veya HTTPS tabanl\u0131 ki\u015fisel eri\u015fim belirte\u00e7leri (Personal Access Tokens &#8211; PATs) gibi farkl\u0131 kimlik do\u011frulama y\u00f6ntemleri sunar. Go&#8217;nun bu mod\u00fcllere eri\u015febilmesi i\u00e7in do\u011fru kimlik do\u011frulama mekanizmas\u0131n\u0131n yap\u0131land\u0131r\u0131lmas\u0131 hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<h3>Kimlik Do\u011frulama Mekanizmalar\u0131<\/h3>\n<p>Go&#8217;nun \u00f6zel mod\u00fcllere eri\u015febilmesi i\u00e7in, temel al\u0131nan Git arac\u0131 arac\u0131l\u0131\u011f\u0131yla kimlik do\u011frulamas\u0131 yapmas\u0131 gerekir. Bu genellikle iki ana y\u00f6ntemle ger\u00e7ekle\u015ftirilir: SSH veya HTTPS.<\/p>\n<h4>SSH ile Kimlik Do\u011frulama<\/h4>\n<p>SSH (Secure Shell) anahtarlar\u0131, sunuculara veya Git depolar\u0131na g\u00fcvenli bir \u015fekilde ba\u011flanmak i\u00e7in yayg\u0131n olarak kullan\u0131lan bir y\u00f6ntemdir. E\u011fer Git depolar\u0131n\u0131za zaten SSH ile eri\u015fiyorsan\u0131z, Go mod\u00fcllerini kullan\u0131rken de bu y\u00f6ntemi tercih edebilirsiniz.<\/p>\n<p>1.  <strong>SSH Anahtarlar\u0131n\u0131n Yap\u0131land\u0131r\u0131lmas\u0131:<\/strong><br \/>\n    *   Bir SSH anahtar \u00e7iftiniz (genellikle <code>~\/.ssh\/id_rsa<\/code> ve <code>~\/.ssh\/id_rsa.pub<\/code>) olmal\u0131d\u0131r.<br \/>\n    *   Genel anahtar\u0131n\u0131z\u0131 (<code>id_rsa.pub<\/code>) Git bar\u0131nd\u0131rma hizmetinize (GitHub, GitLab vb.) eklemi\u015f olmal\u0131s\u0131n\u0131z.<br \/>\n    *   SSH arac\u0131s\u0131 (<code>ssh-agent<\/code>) \u00e7al\u0131\u015f\u0131yor olmal\u0131 ve \u00f6zel anahtar\u0131n\u0131z\u0131 y\u00fcklemi\u015f olmal\u0131d\u0131r (<code>ssh-add ~\/.ssh\/id_rsa<\/code>).<\/p>\n<p>2.  <strong>Go&#8217;nun SSH Kullan\u0131m\u0131n\u0131 Sa\u011flama:<\/strong><br \/>\n    Go, varsay\u0131lan olarak <code>git<\/code> komutunu kullanarak depolar\u0131 klonlamaya \u00e7al\u0131\u015f\u0131r. E\u011fer mod\u00fcl yolunuz SSH protokol\u00fcn\u00fc kullanacak \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015fsa (\u00f6rne\u011fin, <code>git@github.com:myuser\/mymodule.git<\/code>), Go otomatik olarak SSH&#8217;i kullan\u0131r. Ancak, Go mod\u00fcl yollar\u0131 genellikle HTTPS format\u0131ndad\u0131r (\u00f6rne\u011fin, <code>github.com\/myuser\/mymodule<\/code>). Bu durumda, Git&#8217;in belirli bir ana bilgisayar i\u00e7in SSH kullanmas\u0131n\u0131 sa\u011flamak i\u00e7in <code>~\/.gitconfig<\/code> dosyas\u0131n\u0131 yap\u0131land\u0131rman\u0131z gerekir:<\/p>\n<pre><code class=\"language-ini\"># ~\/.gitconfig\n    [url \"git@github.com:\"]\n        insteadOf = https:\/\/github.com\/<\/code><\/pre>\n<p>    Bu yap\u0131land\u0131rma, <code>https:\/\/github.com\/<\/code> ile ba\u015flayan t\u00fcm URL&#8217;leri <code>git@github.com:<\/code> ile de\u011fi\u015ftirecek ve b\u00f6ylece Git, GitHub&#8217;a SSH \u00fczerinden ba\u011flanmaya \u00e7al\u0131\u015facakt\u0131r. Benzer \u015fekilde, GitLab veya di\u011fer Git hizmetleri i\u00e7in de ayn\u0131 yap\u0131land\u0131rmay\u0131 uygulayabilirsiniz.<\/p>\n<p>    <strong>Avantajlar\u0131:<\/strong><br \/>\n    *   Tek bir anahtar \u00e7ifti ile birden fazla depoya eri\u015fim.<br \/>\n    *   PAT&#8217;lere g\u00f6re genellikle daha g\u00fcvenli kabul edilir (anahtar\u0131n \u00f6zel k\u0131sm\u0131 asla a\u011f \u00fczerinden g\u00f6nderilmez).<br \/>\n    *   CI\/CD ortamlar\u0131nda s\u0131r y\u00f6netimi daha kolay olabilir (SSH anahtar\u0131 bir s\u0131r olarak eklenebilir).<\/p>\n<p>    <strong>Dezavantajlar\u0131:<\/strong><br \/>\n    *   Windows ortam\u0131nda yap\u0131land\u0131rmas\u0131 bazen zorlay\u0131c\u0131 olabilir.<br \/>\n    *   Baz\u0131 ortamlarda (\u00f6rne\u011fin, Docker kapsay\u0131c\u0131lar\u0131) <code>ssh-agent<\/code> y\u00f6netimi ek ad\u0131mlar gerektirebilir.<\/p>\n<h4>HTTPS ile Kimlik Do\u011frulama<\/h4>\n<p>HTTPS ile kimlik do\u011frulama, genellikle kullan\u0131c\u0131 ad\u0131\/\u015fifre veya ki\u015fisel eri\u015fim belirte\u00e7leri (Personal Access Tokens &#8211; PATs) kullan\u0131larak yap\u0131l\u0131r. Git, bu kimlik bilgilerini \u00e7e\u015fitli yollarla alabilir. Go ba\u011flam\u0131nda, PAT&#8217;ler en yayg\u0131n ve g\u00fcvenli y\u00f6ntemdir.<\/p>\n<p>1.  <strong>Ki\u015fisel Eri\u015fim Belirte\u00e7leri (PATs):<\/strong><br \/>\n    *   PAT&#8217;ler, \u015fifreniz yerine kullan\u0131labilecek uzun, rastgele dizelerdir.<br \/>\n    *   Her Git hizmeti (GitHub, GitLab, Bitbucket) kendi aray\u00fcz\u00fcnden PAT olu\u015fturma imkan\u0131 sunar.<br \/>\n    *   PAT olu\u015ftururken, mod\u00fcllerinize eri\u015fim i\u00e7in gerekli en d\u00fc\u015f\u00fck izinleri (\u00f6rne\u011fin, &#8220;repo&#8221; veya &#8220;read_repository&#8221;) vermeye dikkat edin.<br \/>\n    *   PAT&#8217;ler genellikle bir son kullanma tarihine sahip olabilir ve belirli IP adresleriyle s\u0131n\u0131rlanabilir.<\/p>\n<p>2.  <strong>PAT&#8217;lerin Go Taraf\u0131ndan Kullan\u0131m\u0131:<\/strong><br \/>\n    Go, HTTPS tabanl\u0131 mod\u00fcllere eri\u015firken kimlik do\u011frulamas\u0131 yapmak i\u00e7in \u00e7e\u015fitli y\u00f6ntemler kullanabilir:<\/p>\n<p>    *   <strong>Ortam De\u011fi\u015fkenleri ile:<\/strong> En basit y\u00f6ntemlerden biridir. PAT&#8217;i do\u011frudan URL&#8217;ye ekleyerek veya <code>GIT_ASKPASS<\/code> gibi ortam de\u011fi\u015fkenleri kullanarak kimlik do\u011frulamas\u0131 yapabilirsiniz. Ancak URL&#8217;ye eklemek g\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00f6nerilmez.<\/p>\n<pre><code class=\"language-bash\"># \u00d6rne\u011fin, GitHub i\u00e7in\n        export GITHUB_TOKEN=\"ghp_YOUR_PAT_HERE\"\n        # Git'i bu token'\u0131 kullanmaya zorlamak i\u00e7in ~\/.gitconfig'i yap\u0131land\u0131r\u0131n\n        # Bu, Go'nun dolayl\u0131 olarak token'\u0131 kullanmas\u0131n\u0131 sa\u011flar.<\/code><\/pre>\n<p>    *   <strong><code>~\/.netrc<\/code> Dosyas\u0131:<\/strong> Unix benzeri sistemlerde, <code>~\/.netrc<\/code> dosyas\u0131, otomatik FTP veya HTTP kimlik do\u011frulamas\u0131 i\u00e7in kimlik bilgilerini depolamak i\u00e7in kullan\u0131l\u0131r. Git de bu dosyay\u0131 kullanabilir.<\/p>\n<pre><code class=\"language-\"># ~\/.netrc\n        machine github.com\n            login <kullan\u0131c\u0131_ad\u0131n\u0131z>\n            password <PAT_token\u0131n\u0131z><\/code><\/pre>\n<p>        <code>~\/.netrc<\/code> dosyas\u0131n\u0131n izinlerinin <code>600<\/code> (sadece sahip okuyabilir\/yazabilir) olarak ayarland\u0131\u011f\u0131ndan emin olun: <code>chmod 600 ~\/.netrc<\/code>.<\/p>\n<p>    *   <strong>Git Credential Helper:<\/strong> Git, kimlik bilgilerini g\u00fcvenli bir \u015fekilde depolamak i\u00e7in kimlik bilgisi yard\u0131mc\u0131lar\u0131 (credential helpers) kullanabilir. \u00d6rne\u011fin, <code>git config --global credential.helper store<\/code> (kimlik bilgilerini d\u00fcz metin olarak depolar, \u00f6nerilmez) veya <code>git config --global credential.helper cache<\/code> (kimlik bilgilerini belirli bir s\u00fcre i\u00e7in \u00f6nbelle\u011fe al\u0131r) veya platforma \u00f6zg\u00fc yard\u0131mc\u0131lar (\u00f6rne\u011fin, macOS i\u00e7in <code>osxkeychain<\/code>, Windows i\u00e7in <code>wincred<\/code>). Bu yard\u0131mc\u0131lar, bir kez kimlik do\u011frulamas\u0131 yapt\u0131ktan sonra PAT&#8217;i tekrar tekrar girmenizi engeller.<\/p>\n<p>    <strong>Avantajlar\u0131:<\/strong><br \/>\n    *   Kurulumu genellikle SSH&#8217;den daha basittir.<br \/>\n    *   G\u00fcvenlik duvar\u0131 k\u0131s\u0131tlamalar\u0131 olan ortamlarda SSH&#8217;den daha iyi \u00e7al\u0131\u015fabilir.<br \/>\n    *   CI\/CD ortamlar\u0131nda s\u0131r y\u00f6netimi kolayd\u0131r.<\/p>\n<p>    <strong>Dezavantajlar\u0131:<\/strong><br \/>\n    *   PAT&#8217;ler s\u0131zd\u0131r\u0131l\u0131rsa k\u00f6t\u00fcye kullan\u0131labilir.<br \/>\n    *   Belirli bir depoya veya kurulu\u015fa \u00f6zg\u00fc olabilirler.<\/p>\n<h3>Ortam De\u011fi\u015fkenlerinin Yap\u0131land\u0131r\u0131lmas\u0131 (Vazge\u00e7ilmez Ad\u0131m)<\/h3>\n<p>Go&#8217;nun \u00f6zel mod\u00fcllerle do\u011fru \u015fekilde \u00e7al\u0131\u015fabilmesi i\u00e7in birka\u00e7 kritik ortam de\u011fi\u015fkeninin ayarlanmas\u0131 gerekir. Bu de\u011fi\u015fkenler, Go&#8217;ya hangi mod\u00fcllerin \u00f6zel oldu\u011funu, Go mod\u00fcl proxy&#8217;sini ne zaman atlamas\u0131 gerekti\u011fini ve checksum veritaban\u0131n\u0131 ne zaman kullanmamas\u0131 gerekti\u011fini s\u00f6yler.<\/p>\n<p>1.  <strong><code>GOPRIVATE<\/code>:<\/strong><br \/>\n    *   <strong>Ama\u00e7:<\/strong> Go&#8217;ya, hangi mod\u00fcl yollar\u0131n\u0131n \u00f6zel oldu\u011funu ve dolay\u0131s\u0131yla internet \u00fczerinden eri\u015filemedi\u011fini bildirir. Go, bu yollar\u0131 i\u00e7eren mod\u00fclleri Go mod\u00fcl proxy&#8217;si arac\u0131l\u0131\u011f\u0131yla indirmeye \u00e7al\u0131\u015fmaz.<br \/>\n    <em>   <strong>De\u011fer:<\/strong> Virg\u00fclle ayr\u0131lm\u0131\u015f bir mod\u00fcl yolu listesidir. Joker karakterler (<code><\/em><\/code>) kullan\u0131labilir.<br \/>\n    *   <strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-bash\">export GOPRIVATE=\"github.com\/myorg\/<em>,internal.mycompany.com\/<\/em>\"<\/code><\/pre>\n<p>        Bu \u00f6rnek, <code>github.com\/myorg\/<\/code> ile ba\u015flayan t\u00fcm mod\u00fcllerin ve <code>internal.mycompany.com\/<\/code> ile ba\u015flayan t\u00fcm mod\u00fcllerin \u00f6zel oldu\u011funu belirtir.<\/p>\n<p>2.  <strong><code>GONOPROXY<\/code>:<\/strong><br \/>\n    *   <strong>Ama\u00e7:<\/strong> Go&#8217;ya, <code>GOPRIVATE<\/code> i\u00e7inde listelenen mod\u00fcller i\u00e7in Go mod\u00fcl proxy&#8217;sini kullanmamas\u0131n\u0131 s\u00f6yler. Bu, Go&#8217;nun do\u011frudan Git deposundan indirme yapmas\u0131n\u0131 sa\u011flar.<br \/>\n    *   <strong>De\u011fer:<\/strong> <code>GOPRIVATE<\/code> ile ayn\u0131 de\u011ferleri alabilir. Genellikle <code>GOPRIVATE<\/code> ile ayn\u0131 \u015fekilde ayarlan\u0131r.<br \/>\n    *   <strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-bash\">export GONOPROXY=\"github.com\/myorg\/<em>,internal.mycompany.com\/<\/em>\"<\/code><\/pre>\n<p>        Go 1.13&#8217;ten itibaren, <code>GONOPROXY<\/code> a\u00e7\u0131k\u00e7a ayarlanmazsa, <code>GOPRIVATE<\/code>&#8216;\u0131n de\u011feri varsay\u0131lan olarak <code>GONOPROXY<\/code> i\u00e7in kullan\u0131l\u0131r. Ancak, a\u00e7\u0131k\u00e7a ayarlamak iyi bir uygulamad\u0131r.<\/p>\n<p>3.  <strong><code>GONOSUMDB<\/code>:<\/strong><br \/>\n    *   <strong>Ama\u00e7:<\/strong> Go&#8217;ya, <code>GOPRIVATE<\/code> i\u00e7inde listelenen mod\u00fcller i\u00e7in Go checksum veritaban\u0131 (<code>sum.golang.org<\/code>) hizmetini kullanmamas\u0131n\u0131 s\u00f6yler. \u00d6zel mod\u00fcllerin checksum&#8217;lar\u0131 genellikle kamuya a\u00e7\u0131k de\u011fildir ve bu hizmete g\u00f6nderilmemelidir.<br \/>\n    *   <strong>De\u011fer:<\/strong> <code>GOPRIVATE<\/code> ile ayn\u0131 de\u011ferleri alabilir. Genellikle <code>GOPRIVATE<\/code> ile ayn\u0131 \u015fekilde ayarlan\u0131r.<br \/>\n    *   <strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-bash\">export GONOSUMDB=\"github.com\/myorg\/<em>,internal.mycompany.com\/<\/em>\"<\/code><\/pre>\n<p>        Go 1.13&#8217;ten itibaren, <code>GONOSUMDB<\/code> a\u00e7\u0131k\u00e7a ayarlanmazsa, <code>GOPRIVATE<\/code>&#8216;\u0131n de\u011feri varsay\u0131lan olarak <code>GONOSUMDB<\/code> i\u00e7in kullan\u0131l\u0131r. Ancak, a\u00e7\u0131k\u00e7a ayarlamak iyi bir uygulamad\u0131r.<\/p>\n<p><strong>Neden \u00dc\u00e7\u00fc Birlikte Kullan\u0131lmal\u0131?<\/strong><\/p>\n<p>Bu \u00fc\u00e7 ortam de\u011fi\u015fkeni, \u00f6zel mod\u00fcllerle \u00e7al\u0131\u015f\u0131rken bir b\u00fct\u00fcn olarak i\u015flev g\u00f6r\u00fcr:<\/p>\n<p>*   <code>GOPRIVATE<\/code>: Go&#8217;ya hangi mod\u00fcllerin \u00f6zel oldu\u011funu bildirir.<br \/>\n*   <code>GONOPROXY<\/code>: Go&#8217;nun \u00f6zel mod\u00fcller i\u00e7in proxy&#8217;yi atlamas\u0131n\u0131 sa\u011flar, b\u00f6ylece do\u011frudan kaynak kontrol sisteminden (Git) indirme yapabilir.<br \/>\n*   <code>GONOSUMDB<\/code>: Go&#8217;nun \u00f6zel mod\u00fcller i\u00e7in checksum veritaban\u0131n\u0131 atlamas\u0131n\u0131 sa\u011flar, bu da g\u00fcvenlik ve gizlilik sa\u011flar.<\/p>\n<p>Bu de\u011fi\u015fkenleri do\u011fru bir \u015fekilde ayarlamak, &#8220;module not found&#8221; veya &#8220;authentication required&#8221; gibi yayg\u0131n hatalar\u0131 \u00f6nlemek i\u00e7in kritik \u00f6neme sahiptir. Bu ayarlar\u0131, genellikle kullan\u0131c\u0131n\u0131n <code>.bashrc<\/code>, <code>.zshrc<\/code> veya sistem genelindeki bir yap\u0131land\u0131rma dosyas\u0131nda kal\u0131c\u0131 hale getirmek en iyisidir.<\/p>\n<p><strong>Go env Komutu ile Ayarlama:<\/strong><\/p>\n<p>Go 1.15 ve sonras\u0131 s\u00fcr\u00fcmlerde, <code>go env -w<\/code> komutunu kullanarak bu ayarlar\u0131 kal\u0131c\u0131 olarak yapabilirsiniz. Bu ayarlar, Go&#8217;nun kendi yap\u0131land\u0131rma dosyas\u0131nda saklan\u0131r ve kabuk ortam de\u011fi\u015fkenlerinden ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-bash\">go env -w GOPRIVATE=\"github.com\/myorg\/<em>,internal.mycompany.com\/<\/em>\"\ngo env -w GONOPROXY=\"github.com\/myorg\/<em>,internal.mycompany.com\/<\/em>\"\ngo env -w GONOSUMDB=\"github.com\/myorg\/<em>,internal.mycompany.com\/<\/em>\"<\/code><\/pre>\n<p>Bu komutlar, kullan\u0131c\u0131n\u0131n ev dizinindeki Go yap\u0131land\u0131rma dosyas\u0131nda (\u00f6rne\u011fin, <code>~\/.config\/go\/env<\/code> veya <code>~\/Library\/Application Support\/go\/env<\/code> macOS&#8217;ta) ayarlar\u0131 kal\u0131c\u0131 hale getirir.<\/p>\n<h3>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve Pratik Uygulamalar<\/h3>\n<p>\u015eimdi bu teorik bilgileri pratik senaryolara uygulayal\u0131m.<\/p>\n<h4>GitHub ile \u00d6zel Mod\u00fcl Kullan\u0131m\u0131<\/h4>\n<p>Farz edelim ki <code>github.com\/myorg\/my-private-lib<\/code> ad\u0131nda \u00f6zel bir Go mod\u00fcl\u00fcn\u00fcz var ve bunu <code>github.com\/myorg\/my-app<\/code> projenizde kullanmak istiyorsunuz.<\/p>\n<p>1.  <strong>GitHub Ki\u015fisel Eri\u015fim Belirteci (PAT) Olu\u015fturma:<\/strong><br \/>\n    *   GitHub hesab\u0131n\u0131za giri\u015f yap\u0131n.<br \/>\n    *   Ayarlar -> Geli\u015ftirici ayarlar\u0131 -> Ki\u015fisel eri\u015fim belirte\u00e7leri -> Belirte\u00e7ler (klasik) -> Yeni belirte\u00e7 olu\u015ftur&#8217;a gidin.<br \/>\n    *   Belirtecinize a\u00e7\u0131klay\u0131c\u0131 bir ad verin (\u00f6rne\u011fin, &#8220;go-mod-access&#8221;).<br \/>\n    *   <code>repo<\/code> kapsam\u0131n\u0131 (veya daha spesifik olarak <code>repo:status<\/code>, <code>repo_deployment<\/code>, <code>public_repo<\/code>, <code>repo:invite<\/code> gibi alt kapsamlar\u0131) se\u00e7in. Sadece okuma eri\u015fimi i\u00e7in <code>read:packages<\/code> veya <code>repo<\/code> yeterli olabilir.<br \/>\n    *   Belirteci olu\u015fturun ve g\u00f6rd\u00fc\u011f\u00fcn\u00fcz PAT&#8217;i kopyalay\u0131n. <strong>Bu belirteci bir daha g\u00f6remeyeceksiniz, bu y\u00fczden g\u00fcvenli bir yere kaydedin.<\/strong><\/p>\n<p>2.  <strong>Ortam De\u011fi\u015fkenlerini Ayarlama:<\/strong><\/p>\n<pre><code class=\"language-bash\">export GOPRIVATE=\"github.com\/myorg\/*\"\n    export GONOPROXY=\"github.com\/myorg\/*\" # Go 1.13+ i\u00e7in GOPRIVATE ile ayn\u0131 varsay\u0131lan\n    export GONOSUMDB=\"github.com\/myorg\/*\" # Go 1.13+ i\u00e7in GOPRIVATE ile ayn\u0131 varsay\u0131lan<\/code><\/pre>\n<p>    Bu ayarlar\u0131 kal\u0131c\u0131 hale getirmek i\u00e7in <code>~\/.bashrc<\/code> veya <code>go env -w<\/code> kullan\u0131n.<\/p>\n<p>3.  <strong>Kimlik Do\u011frulama (HTTPS\/PAT ile):<\/strong><br \/>\n    *   <strong><code>~\/.netrc<\/code> ile:<\/strong><\/p>\n<pre><code class=\"language-\"># ~\/.netrc\n        machine github.com\n            login <github_kullan\u0131c\u0131_ad\u0131n\u0131z>\n            password <github_PAT_token\u0131n\u0131z><\/code><\/pre>\n<p>        <code>chmod 600 ~\/.netrc<\/code> komutunu unutmay\u0131n.<br \/>\n    *   <strong>Git Credential Helper ile:<\/strong><\/p>\n<pre><code class=\"language-bash\">git config --global credential.helper store # \u0130lk kez kimlik bilgilerinizi girmenizi ister, sonra depolar.\n        # veya\n        git config --global credential.helper osxkeychain # macOS i\u00e7in\n        # veya\n        git config --global credential.helper wincred # Windows i\u00e7in<\/code><\/pre>\n<p>        Ard\u0131ndan, bir kez <code>git clone https:\/\/github.com\/myorg\/my-private-lib.git<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n ve PAT&#8217;inizi girdi\u011finizde, kimlik bilgisi yard\u0131mc\u0131s\u0131 bunu kaydedecektir.<\/p>\n<p>4.  <strong>Projeye Dahil Etme:<\/strong><br \/>\n    <code>my-app<\/code> projenizin k\u00f6k dizininde:<\/p>\n<pre><code class=\"language-bash\">cd my-app\n    go get github.com\/myorg\/my-private-lib@latest # veya belirli bir versiyon<\/code><\/pre>\n<p>    Bu komut, <code>my-private-lib<\/code> mod\u00fcl\u00fcn\u00fc indirecek ve <code>go.mod<\/code> dosyan\u0131za ekleyecektir. Art\u0131k kodunuzda <code>import \"github.com\/myorg\/my-private-lib\"<\/code> yapabilirsiniz.<\/p>\n<h4>GitLab ile \u00d6zel Mod\u00fcl Kullan\u0131m\u0131<\/h4>\n<p>GitLab i\u00e7in s\u00fcre\u00e7 GitHub&#8217;a \u00e7ok benzer.<\/p>\n<p>1.  <strong>GitLab PAT veya Deploy Token Olu\u015fturma:<\/strong><br \/>\n    *   <strong>PAT:<\/strong> Kullan\u0131c\u0131 Ayarlar\u0131 -> Eri\u015fim Belirte\u00e7leri b\u00f6l\u00fcm\u00fcnden olu\u015fturulur. <code>read_repository<\/code> veya <code>api<\/code> kapsam\u0131 gerekebilir.<br \/>\n    *   <strong>Deploy Token:<\/strong> Proje Ayarlar\u0131 -> Depo -> Da\u011f\u0131t\u0131m Belirte\u00e7leri b\u00f6l\u00fcm\u00fcnden olu\u015fturulur. Bu, projeniz i\u00e7in \u00f6zel bir belirte\u00e7tir ve belirli bir depoya eri\u015fim sa\u011flar.<\/p>\n<p>2.  <strong>Ortam De\u011fi\u015fkenlerini Ayarlama:<\/strong><\/p>\n<pre><code class=\"language-bash\">export GOPRIVATE=\"gitlab.com\/myorg\/*\"\n    export GONOPROXY=\"gitlab.com\/myorg\/*\"\n    export GONOSUMDB=\"gitlab.com\/myorg\/*\"<\/code><\/pre>\n<p>3.  <strong>Kimlik Do\u011frulama:<\/strong><br \/>\n    *   <strong><code>~\/.netrc<\/code> ile:<\/strong><\/p>\n<pre><code class=\"language-\"># ~\/.netrc\n        machine gitlab.com\n            login <gitlab_kullan\u0131c\u0131_ad\u0131n\u0131z> # Veya deploy token ad\u0131\n            password <gitlab_PAT_token\u0131n\u0131z> # Veya deploy token de\u011feri<\/code><\/pre>\n<p>    *   <strong>SSH ile (e\u011fer tercih ediyorsan\u0131z):<\/strong> <code>~\/.gitconfig<\/code> dosyas\u0131nda URL yeniden yazma kural\u0131n\u0131 ayarlay\u0131n:<\/p>\n<pre><code class=\"language-ini\"># ~\/.gitconfig\n        [url \"git@gitlab.com:\"]\n            insteadOf = https:\/\/gitlab.com\/<\/code><\/pre>\n<p>4.  <strong>Projeye Dahil Etme:<\/strong><\/p>\n<pre><code class=\"language-bash\">go get gitlab.com\/myorg\/my-private-lib@latest<\/code><\/pre>\n<h4>\u015eirket \u0130\u00e7i (Self-Hosted) Git Sunucular\u0131<\/h4>\n<p>\u015eirket i\u00e7i sunucular i\u00e7in s\u00fcre\u00e7, bar\u0131nd\u0131rma platformuna g\u00f6re de\u011fi\u015febilir, ancak temel prensipler ayn\u0131d\u0131r.<\/p>\n<p>1.  <strong>Mod\u00fcl Yolu:<\/strong> \u015eirket i\u00e7i sunucular i\u00e7in genellikle \u00f6zel bir alan ad\u0131 kullan\u0131l\u0131r (\u00f6rne\u011fin, <code>internal.mycompany.com\/go\/mymodule<\/code>). Go&#8217;nun bu yolu tan\u0131mas\u0131 i\u00e7in <code>.gitconfig<\/code> dosyas\u0131nda bir <code>insteadOf<\/code> kural\u0131 veya <code>go get<\/code> komutunda tam URL kullan\u0131m\u0131 gerekebilir.<\/p>\n<p>2.  <strong>Ortam De\u011fi\u015fkenleri:<\/strong><\/p>\n<pre><code class=\"language-bash\">export GOPRIVATE=\"internal.mycompany.com\/*\"\n    export GONOPROXY=\"internal.mycompany.com\/*\"\n    export GONOSUMDB=\"internal.mycompany.com\/*\"<\/code><\/pre>\n<p>3.  <strong>Kimlik Do\u011frulama:<\/strong><br \/>\n    *   <strong>SSH:<\/strong> En yayg\u0131n y\u00f6ntemdir. SSH anahtar\u0131n\u0131z\u0131 sunucuya ekleyin ve <code>~\/.gitconfig<\/code> dosyas\u0131nda <code>insteadOf<\/code> kural\u0131n\u0131 kullan\u0131n:<\/p>\n<pre><code class=\"language-ini\"># ~\/.gitconfig\n        [url \"ssh:\/\/git@internal.mycompany.com:port\/\"] # Veya sadece git@internal.mycompany.com:\n            insteadOf = https:\/\/internal.mycompany.com\/<\/code><\/pre>\n<p>    *   <strong>HTTPS\/PAT:<\/strong> E\u011fer \u015firket i\u00e7i Git sunucunuz PAT&#8217;leri destekliyorsa, <code>~\/.netrc<\/code> dosyas\u0131n\u0131 veya Git kimlik bilgisi yard\u0131mc\u0131lar\u0131n\u0131 kullanabilirsiniz.<\/p>\n<p>4.  <strong>Projeye Dahil Etme:<\/strong><\/p>\n<pre><code class=\"language-bash\">go get internal.mycompany.com\/go\/mymodule@latest<\/code><\/pre>\n<h3>Go Mod\u00fcllerini Bir Projeye Dahil Etme<\/h3>\n<p>\u00d6zel mod\u00fcl\u00fcn\u00fcz\u00fc projenize dahil etmek i\u00e7in temel Go komutlar\u0131n\u0131 kullan\u0131rs\u0131n\u0131z:<\/p>\n<p>1.  <strong><code>go get<\/code> Komutu:<\/strong><\/p>\n<pre><code class=\"language-bash\">go get <mod\u00fcl_yolu>@<versiyon><\/code><\/pre>\n<p>    \u00d6rne\u011fin: <code>go get github.com\/myorg\/my-private-lib@v1.0.0<\/code><br \/>\n    <code>@latest<\/code> kullanarak en son kararl\u0131 s\u00fcr\u00fcm\u00fc \u00e7ekebilirsiniz. Bu komut, mod\u00fcl\u00fc indirir, \u00f6nbelle\u011fe al\u0131r ve <code>go.mod<\/code> dosyan\u0131zdaki <code>require<\/code> b\u00f6l\u00fcm\u00fcne ekler.<\/p>\n<p>2.  <strong><code>go mod tidy<\/code> Komutu:<\/strong><br \/>\n    <code>go mod tidy<\/code> komutu, <code>go.mod<\/code> dosyan\u0131z\u0131 g\u00fcncelleyerek gereksiz ba\u011f\u0131ml\u0131l\u0131klar\u0131 kald\u0131r\u0131r ve eksik olanlar\u0131 ekler. <code>go get<\/code> sonras\u0131 veya kodunuzda import yollar\u0131n\u0131 de\u011fi\u015ftirdikten sonra \u00e7al\u0131\u015ft\u0131rmak iyi bir al\u0131\u015fkanl\u0131kt\u0131r.<\/p>\n<p>3.  <strong><code>replace<\/code> Direktifi:<\/strong><br \/>\n    <code>go.mod<\/code> dosyas\u0131ndaki <code>replace<\/code> direktifi, bir mod\u00fcl\u00fcn ba\u015fka bir mod\u00fclle de\u011fi\u015ftirilmesini sa\u011flar. Bu, \u00f6zellikle geli\u015ftirme s\u0131ras\u0131nda yerel bir kopyay\u0131 test etmek veya bir mod\u00fcl\u00fcn \u00e7atal\u0131n\u0131 kullanmak istedi\u011finizde \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-go\">\/\/ go.mod dosyan\u0131zda\n    module github.com\/myorg\/my-app\n\n    go 1.20\n\n    require (\n        github.com\/myorg\/my-private-lib v1.0.0\n    )\n\n    replace github.com\/myorg\/my-private-lib v1.0.0 => ..\/my-private-lib \/\/ Yerel yol\n    \/\/ veya\n    \/\/ replace github.com\/myorg\/my-private-lib v1.0.0 => github.com\/myfork\/my-private-lib v1.0.0 \/\/ \u00c7atal<\/code><\/pre>\n<p>    <code>replace<\/code> direktifi, Go&#8217;nun mod\u00fcl\u00fc belirtilen yoldan (yerel dizin veya farkl\u0131 bir uzak depo) almas\u0131n\u0131 sa\u011flar. \u00dcretime da\u011f\u0131t\u0131m yaparken bu <code>replace<\/code> direktifini kald\u0131rman\u0131z veya do\u011fru uzak depoya i\u015faret etti\u011finden emin olman\u0131z gerekir.<\/p>\n<h3>CI\/CD Ortamlar\u0131nda \u00d6zel Mod\u00fcllerin Y\u00f6netimi<\/h3>\n<p>S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131nda \u00f6zel Go mod\u00fcllerini kullanmak, yerel geli\u015ftirme ortam\u0131n\u0131zdan biraz farkl\u0131 bir yakla\u015f\u0131m gerektirir. Temel zorluk, kimlik bilgilerini (SSH anahtarlar\u0131 veya PAT&#8217;ler) g\u00fcvenli bir \u015fekilde sa\u011flamak ve ortam de\u011fi\u015fkenlerini do\u011fru bir \u015fekilde ayarlamakt\u0131r.<\/p>\n<p>1.  <strong>S\u0131r Y\u00f6netimi (Secret Management):<\/strong><br \/>\n    *   <strong>PAT&#8217;ler:<\/strong> \u00c7o\u011fu CI\/CD sistemi (GitHub Actions, GitLab CI, Jenkins, CircleCI vb.), s\u0131rlar\u0131 (secrets) g\u00fcvenli bir \u015fekilde saklama ve boru hatt\u0131 ad\u0131mlar\u0131na ortam de\u011fi\u015fkenleri olarak enjekte etme yetene\u011fine sahiptir. PAT&#8217;inizi bu s\u0131r y\u00f6neticilerine ekleyin.<\/p>\n<pre><code class=\"language-yaml\"># GitHub Actions \u00f6rne\u011fi\n        env:\n          GOPRIVATE: \"github.com\/myorg\/*\"\n          GONOPROXY: \"github.com\/myorg\/*\"\n          GONOSUMDB: \"github.com\/myorg\/*\"\n          GIT_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # GitHub'\u0131n yerle\u015fik PAT'i veya kendi olu\u015fturdu\u011funuz\n        run: |\n          git config --global url.\"https:\/\/oauth2:${GIT_AUTH_TOKEN}@github.com\".insteadOf \"https:\/\/github.com\"\n          go mod tidy\n          go build .\/...<\/code><\/pre>\n<p>    *   <strong>SSH Anahtarlar\u0131:<\/strong> \u00d6zel SSH anahtar\u0131n\u0131z\u0131 CI\/CD sisteminin s\u0131r y\u00f6neticisine ekleyin. Ard\u0131ndan, boru hatt\u0131n\u0131zda bir <code>ssh-agent<\/code> ba\u015flat\u0131n ve anahtar\u0131 ekleyin.<\/p>\n<pre><code class=\"language-yaml\"># GitLab CI \u00f6rne\u011fi\n        before_script:\n          - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'\n          - eval $(ssh-agent -s)\n          - echo \"$SSH_PRIVATE_KEY\" | tr -d '\\r' | ssh-add -\n          - mkdir -p ~\/.ssh\n          - chmod 700 ~\/.ssh\n          - ssh-keyscan github.com >> ~\/.ssh\/known_hosts\n          - chmod 644 ~\/.ssh\/known_hosts\n          - git config --global url.\"git@github.com:\".insteadOf \"https:\/\/github.com\/\"\n          - export GOPRIVATE=\"github.com\/myorg\/*\"\n          - export GONOPROXY=\"github.com\/myorg\/*\"\n          - export GONOSUMDB=\"github.com\/myorg\/*\"\n        script:\n          - go mod tidy\n          - go build .\/...<\/code><\/pre>\n<p>        Burada <code>SSH_PRIVATE_KEY<\/code> bir CI\/CD s\u0131rr\u0131 olarak saklanan \u00f6zel SSH anahtar\u0131n\u0131zd\u0131r.<\/p>\n<p>2.  <strong>Kapsay\u0131c\u0131 Tabanl\u0131 Ortamlar (Docker):<\/strong><br \/>\n    Docker konteynerleri i\u00e7inde Go uygulamalar\u0131 geli\u015ftiriyorsan\u0131z, <code>Dockerfile<\/code> i\u00e7inde veya derleme s\u0131ras\u0131nda bu ortam de\u011fi\u015fkenlerini ve kimlik bilgilerini sa\u011flaman\u0131z gerekir.<br \/>\n    *   <code>Dockerfile<\/code> i\u00e7inde <code>ARG<\/code> ve <code>ENV<\/code> komutlar\u0131n\u0131 kullanabilirsiniz. PAT&#8217;leri do\u011frudan <code>Dockerfile<\/code> i\u00e7ine yazmaktan ka\u00e7\u0131n\u0131n; derleme arg\u00fcmanlar\u0131 (<code>--build-arg<\/code>) veya CI\/CD s\u0131rlar\u0131 arac\u0131l\u0131\u011f\u0131yla ge\u00e7irin.<br \/>\n    *   \u00c7ok a\u015famal\u0131 derlemeler (multi-stage builds) kullanarak nihai imajda kimlik bilgilerinin kalmamas\u0131n\u0131 sa\u011flay\u0131n.<\/p>\n<pre><code class=\"language-dockerfile\"># Dockerfile \u00f6rne\u011fi\n    FROM golang:1.20 AS builder\n\n    ARG GITHUB_TOKEN # Build arg olarak token al\n    ENV GOPRIVATE=\"github.com\/myorg\/*\"\n    ENV GONOPROXY=\"github.com\/myorg\/*\"\n    ENV GONOSUMDB=\"github.com\/myorg\/*\"\n\n    WORKDIR \/app\n\n    # Git'e kimlik do\u011frulamas\u0131 i\u00e7in PAT'\u0131 kullan\n    RUN git config --global url.\"https:\/\/oauth2:${GITHUB_TOKEN}@github.com\".insteadOf \"https:\/\/github.com\"\n\n    COPY go.mod go.sum .\/\n    RUN go mod download\n\n    COPY . .\n    RUN go build -o myapp .\n\n    FROM alpine:latest\n    WORKDIR \/root\/\n    COPY --from=builder \/app\/myapp .\n    CMD [\".\/myapp\"]<\/code><\/pre>\n<p>    Bu Dockerfile&#8217;\u0131 <code>docker build --build-arg GITHUB_TOKEN=$MY_PAT -t myapp .<\/code> komutuyla derleyebilirsiniz.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>\u00d6zel Go mod\u00fclleriyle \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>1.  <strong>&#8220;go: module <mod\u00fcl_yolu> not found&#8221; veya &#8220;authentication required&#8221; hatalar\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>GOPRIVATE<\/code>, <code>GONOPROXY<\/code>, <code>GONOSUMDB<\/code> ortam de\u011fi\u015fkenlerinin do\u011fru ayarland\u0131\u011f\u0131ndan emin olun. Mod\u00fcl yolunun joker karakterlerle bile e\u015fle\u015fti\u011fini kontrol edin.<br \/>\n    *   Kimlik do\u011frulama bilgilerinizin (SSH anahtarlar\u0131 veya PAT&#8217;ler) do\u011fru ve eri\u015filebilir oldu\u011fundan emin olun. <code>git clone <mod\u00fcl_urlsi><\/code> komutunu manuel olarak \u00e7al\u0131\u015ft\u0131rarak Git&#8217;in kimlik do\u011frulamas\u0131 yap\u0131p yapamad\u0131\u011f\u0131n\u0131 test edin.<br \/>\n    *   <code>~\/.netrc<\/code> dosyas\u0131n\u0131n izinlerinin <code>600<\/code> oldu\u011fundan emin olun.<br \/>\n    *   SSH kullan\u0131yorsan\u0131z, <code>ssh-agent<\/code>&#8216;\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve anahtar\u0131n\u0131z\u0131n y\u00fckl\u00fc oldu\u011fundan emin olun (<code>ssh-add -l<\/code>).<\/p>\n<p>2.  <strong>&#8220;proxy: unrecognized scheme&#8221; veya &#8220;malformed module path&#8221; hatalar\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Genellikle <code>GOPRIVATE<\/code> veya <code>GONOPROXY<\/code> ayarlar\u0131n\u0131n yanl\u0131\u015f oldu\u011funu g\u00f6sterir. Go, \u00f6zel mod\u00fcl\u00fc hala bir proxy arac\u0131l\u0131\u011f\u0131yla indirmeye \u00e7al\u0131\u015f\u0131yor olabilir. Ortam de\u011fi\u015fkenlerini tekrar kontrol edin.<\/p>\n<p>3.  <strong>&#8220;checksum mismatch&#8221; veya &#8220;go.sum: verify: checksum mismatch&#8221; hatalar\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>GONOSUMDB<\/code> ortam de\u011fi\u015fkeninin do\u011fru ayarland\u0131\u011f\u0131ndan emin olun. \u00d6zel mod\u00fcllerin checksum&#8217;lar\u0131 genel veritaban\u0131nda bulunmayaca\u011f\u0131 i\u00e7in bu hatay\u0131 al\u0131rs\u0131n\u0131z.<br \/>\n    *   E\u011fer mod\u00fcl\u00fcn i\u00e7eri\u011fi ger\u00e7ekten de\u011fi\u015ftiyse, <code>go mod tidy<\/code> veya <code>go get -u <mod\u00fcl_yolu><\/code> komutlar\u0131n\u0131 kullanarak <code>go.sum<\/code> dosyas\u0131n\u0131 g\u00fcncelleyebilirsiniz.<\/p>\n<p>4.  <strong>\u00d6nbellek sorunlar\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Go mod\u00fcl \u00f6nbelle\u011fini temizlemek i\u00e7in <code>go clean -modcache<\/code> komutunu kullan\u0131n. Bu, Go&#8217;yu t\u00fcm mod\u00fclleri yeniden indirmeye zorlar.<\/p>\n<p>5.  <strong>Git URL&#8217;si ile Go mod\u00fcl yolu uyu\u015fmazl\u0131\u011f\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Go mod\u00fcl yolu, genellikle Git deposunun HTTPS URL&#8217;sine benzer (\u00f6rne\u011fin, <code>github.com\/user\/repo<\/code>). E\u011fer SSH kullan\u0131yorsan\u0131z, <code>~\/.gitconfig<\/code> dosyas\u0131ndaki <code>insteadOf<\/code> kural\u0131n\u0131n do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun. Go, mod\u00fcl yolunu kullanarak depoyu bulmaya \u00e7al\u0131\u015f\u0131r.<\/p>\n<h3>Geli\u015fmi\u015f Konular (K\u0131sa Bahsetme)<\/h3>\n<p>*   <strong>Go Module Proxy (GOPROXY) ve \u00d6zel Proxy&#8217;ler:<\/strong> B\u00fcy\u00fck kurulu\u015flar, kendi \u00f6zel Go mod\u00fcl proxy&#8217;lerini \u00e7al\u0131\u015ft\u0131rabilirler. Bu proxy&#8217;ler, hem a\u00e7\u0131k kaynakl\u0131 hem de \u00f6zel mod\u00fclleri \u00f6nbelle\u011fe alarak ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimini merkezile\u015ftirir ve h\u0131zland\u0131r\u0131r. Bu durumda, <code>GOPROXY<\/code> ortam de\u011fi\u015fkeni, bu \u00f6zel proxy&#8217;ye i\u015faret edecek \u015fekilde ayarlan\u0131r ve proxy, \u00f6zel mod\u00fcller i\u00e7in kimlik do\u011frulamas\u0131n\u0131 kendisi y\u00f6netir.<br \/>\n*   <strong>Vendoring:<\/strong> Go mod\u00fclleri, <code>go mod vendor<\/code> komutuyla ba\u011f\u0131ml\u0131l\u0131klar\u0131 projenin <code>vendor<\/code> dizinine kopyalama imkan\u0131 sunar. Bu, \u00f6zellikle ba\u011f\u0131ml\u0131l\u0131klar\u0131n tamamen izole edilmesi gereken veya internet eri\u015fiminin k\u0131s\u0131tl\u0131 oldu\u011fu ortamlarda kullan\u0131\u015fl\u0131d\u0131r. Ancak, modern Go mod\u00fcl y\u00f6netimiyle genellikle daha az ihtiya\u00e7 duyulur.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>\u00d6zel Go mod\u00fcllerini kendi projelerinizde kullanmak, ba\u015flang\u0131\u00e7ta biraz yap\u0131land\u0131rma gerektirse de, Go&#8217;nun g\u00fc\u00e7l\u00fc ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi \u00f6zellikleri sayesinde olduk\u00e7a y\u00f6netilebilir bir s\u00fcre\u00e7tir. Do\u011fru kimlik do\u011frulama y\u00f6ntemini se\u00e7mek (SSH veya HTTPS\/PAT), <code>GOPRIVATE<\/code>, <code>GONOPROXY<\/code> ve <code>GONOSUMDB<\/code> ortam de\u011fi\u015fkenlerini eksiksiz ve do\u011fru bir \u015fekilde yap\u0131land\u0131rmak bu s\u00fcrecin temel ta\u015flar\u0131d\u0131r.<\/p>\n<p>Bu ad\u0131mlar\u0131 takip ederek, fikri m\u00fclkiyetinizi koruyabilir, \u015firket i\u00e7i kod payla\u015f\u0131m\u0131n\u0131 kolayla\u015ft\u0131rabilir ve geli\u015ftirme s\u00fcre\u00e7lerinizi daha verimli hale getirebilirsiniz. CI\/CD ortamlar\u0131nda s\u0131r y\u00f6netimine dikkat etmek ve Docker gibi kapsay\u0131c\u0131 teknolojilerle entegrasyonu do\u011fru yapmak, projelerinizin g\u00fcvenli ve \u00f6l\u00e7eklenebilir kalmas\u0131n\u0131 sa\u011flayacakt\u0131r. Unutmay\u0131n, iyi yap\u0131land\u0131r\u0131lm\u0131\u015f bir ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi, her Go projesinin ba\u015far\u0131s\u0131 i\u00e7in hayati \u00f6neme sahiptir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi\nGo dili, basitli\u011fi, performans\u0131 ve g\u00fc\u00e7l\u00fc e\u015fzamanl\u0131l\u0131k yetenekleriyle modern yaz\u0131l\u0131m","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":[1],"tags":[],"class_list":{"0":"post-39135","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi\" \/>\n<meta property=\"og:description\" content=\"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi Go dili, basitli\u011fi, performans\u0131 ve g\u00fc\u00e7l\u00fc e\u015fzamanl\u0131l\u0131k yetenekleriyle modern yaz\u0131l\u0131m\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-15T02:40:46+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=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi\",\"datePublished\":\"2026-02-15T02:40:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/\"},\"wordCount\":3331,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/\",\"name\":\"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-15T02:40:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi\"}]},{\"@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":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi","og_description":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi Go dili, basitli\u011fi, performans\u0131 ve g\u00fc\u00e7l\u00fc e\u015fzamanl\u0131l\u0131k yetenekleriyle modern yaz\u0131l\u0131m","og_url":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-15T02:40:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi","datePublished":"2026-02-15T02:40:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/"},"wordCount":3331,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/","name":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-15T02:40:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ozel-go-modullerini-kendi-projenizde-kullanma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"\u00d6zel Go Mod\u00fcllerini Kendi Projenizde Kullanma Rehberi"}]},{"@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\/39135","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=39135"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39135\/revisions"}],"predecessor-version":[{"id":39136,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39135\/revisions\/39136"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}