{"id":41518,"date":"2026-04-30T21:02:15","date_gmt":"2026-04-30T18:02:15","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/"},"modified":"2026-04-30T21:02:15","modified_gmt":"2026-04-30T18:02:15","slug":"150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/","title":{"rendered":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!"},"content":{"rendered":"<pre><code class=\"language-html\"><body>\n  <h2>150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!<\/h2>\n  <p>GitHub'daki da\u011f\u0131n\u0131k depolar\u0131n\u0131z\u0131 d\u00fczenlemek i\u00e7in bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz? Bu makalede, 150'den fazla GitHub deponuzu Go ile yazd\u0131\u011f\u0131m kendi arac\u0131m sayesinde nas\u0131l temizledi\u011fimi ad\u0131m ad\u0131m anlataca\u011f\u0131m. Geli\u015ftirme s\u00fcrecinden ba\u015flay\u0131p, kar\u015f\u0131la\u015ft\u0131\u011f\u0131m zorluklara ve elde etti\u011fim sonu\u00e7lara kadar her \u015feyi bulacaks\u0131n\u0131z. Kendi projelerinizi daha verimli y\u00f6netmek i\u00e7in bu deneyimden ilham alabilirsiniz.<\/p>\n\n  <h2>Neden GitHub Depolar\u0131m\u0131 D\u00fczenlemeye \u0130htiya\u00e7 Duydum?<\/h2>\n  <p>Bir yaz\u0131l\u0131mc\u0131 olarak, zamanla GitHub'da biriken projelerimiz adeta dijital bir da\u011f\u0131n\u0131kl\u0131\u011fa d\u00f6n\u00fc\u015febiliyor. Ba\u015flang\u0131\u00e7ta heyecanla olu\u015fturdu\u011fumuz her bir depo, zamanla unutulmu\u015f, g\u00fcncellenmemi\u015f veya amac\u0131n\u0131 yitirmi\u015f hale gelebiliyor. Benim durumumda da tam olarak b\u00f6yleydi. Y\u0131llar i\u00e7inde geli\u015ftirdi\u011fim, denedi\u011fim, yar\u0131m b\u0131rakt\u0131\u011f\u0131m veya art\u0131k aktif olarak kullanmad\u0131\u011f\u0131m y\u00fczlerce depo, GitHub hesab\u0131m\u0131n adeta bir \u00e7\u00f6p kutusuna d\u00f6n\u00fc\u015fmesine neden olmu\u015ftu. Bu durum, hem benim i\u00e7in bir rahats\u0131zl\u0131k kayna\u011f\u0131yd\u0131 hem de potansiyel i\u015fverenlerin veya i\u015fbirlik\u00e7ilerin benim hakk\u0131mda olumsuz bir izlenim edinmesine yol a\u00e7abilirdi. Bir projeye ba\u015flarken veya mevcut bir projeyi geli\u015ftirmeye \u00e7al\u0131\u015f\u0131rken, gereksiz dosyalar, eski kodlar, g\u00fcncel olmayan ba\u011f\u0131ml\u0131l\u0131klar ve karma\u015f\u0131k yap\u0131land\u0131rmalar aras\u0131nda kaybolmak, motivasyonumu d\u00fc\u015f\u00fcr\u00fcyor ve verimlili\u011fimi baltal\u0131yordu. Bu da\u011f\u0131n\u0131kl\u0131k, sadece estetik bir sorun olman\u0131n \u00f6tesinde, g\u00fcvenlik a\u00e7\u0131klar\u0131na davetiye \u00e7\u0131karabilecek eski k\u00fct\u00fcphaneler veya g\u00fcncel olmayan yap\u0131land\u0131rmalar gibi somut riskler de ta\u015f\u0131yordu. Bu nedenle, bu soruna k\u00f6kl\u00fc bir \u00e7\u00f6z\u00fcm bulmam gerekti\u011fini fark ettim. Kendi projelerimi y\u00f6netmek ve daha temiz, daha organize bir dijital ayak izi b\u0131rakmak i\u00e7in harekete ge\u00e7me zaman\u0131 gelmi\u015fti.<\/p>\n\n  <h3>Depolar\u0131n Da\u011f\u0131n\u0131kl\u0131\u011f\u0131n\u0131n Getirdi\u011fi Sorunlar Nelerdir?<\/h3>\n  <p>GitHub depolar\u0131n\u0131n d\u00fczensiz olmas\u0131, bir\u00e7ok geli\u015ftiricinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131 yayg\u0131n bir sorundur. \u00d6ncelikle, da\u011f\u0131n\u0131k depolar, projenin mevcut durumunu anlamay\u0131 zorla\u015ft\u0131r\u0131r. Hangi dosyan\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, en g\u00fcncel kodun nerede oldu\u011funu veya projenin hangi a\u015famada oldu\u011funu belirlemek zaman al\u0131c\u0131 bir hale gelir. Bu durum, \u00f6zellikle yeni bir projeye ba\u015flarken veya mevcut bir projeye katk\u0131da bulunurken b\u00fcy\u00fck bir engel te\u015fkil eder. \u0130kinci olarak, g\u00fcncellenmemi\u015f k\u00fct\u00fcphaneler ve ba\u011f\u0131ml\u0131l\u0131klar g\u00fcvenlik riskleri olu\u015fturur. Eski s\u00fcr\u00fcmler, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131na sahip olabilir ve bu da projenizi siber sald\u0131r\u0131lara kar\u015f\u0131 savunmas\u0131z b\u0131rakabilir. Ayr\u0131ca, gereksiz dosyalar ve eski kodlar, projenin boyutunu art\u0131rarak indirme ve derleme s\u00fcrelerini uzat\u0131r, bu da geli\u015ftirme s\u00fcrecini yava\u015flat\u0131r. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, karma\u015f\u0131k ve anla\u015f\u0131lmaz depo yap\u0131lar\u0131, ekip \u00e7al\u0131\u015fmas\u0131n\u0131 zorla\u015ft\u0131r\u0131r. Yeni ekip \u00fcyelerinin projeye adapte olmas\u0131 g\u00fc\u00e7le\u015fir ve kodun anla\u015f\u0131lmas\u0131 i\u00e7in fazladan \u00e7aba harcanmas\u0131 gerekir. Son olarak, da\u011f\u0131n\u0131k bir GitHub profili, profesyonel bir imaj \u00e7izmez. Potansiyel i\u015fverenler veya i\u015fbirlik\u00e7iler, projenizin d\u00fczenlili\u011fini ve bak\u0131m\u0131n\u0131 \u00f6nemsemedi\u011finiz izlenimine kap\u0131labilirler. Bu da kariyer f\u0131rsatlar\u0131n\u0131 olumsuz etkileyebilir. K\u0131sacas\u0131, depolar\u0131n d\u00fczenli olmamas\u0131, sadece bir estetik tercih de\u011fil, ayn\u0131 zamanda verimlilik, g\u00fcvenlik ve profesyonellik a\u00e7\u0131s\u0131ndan da ciddi sonu\u00e7lar\u0131 olan bir durumdur.<\/p>\n\n  <h2>Go ile Kendi D\u00fczenleme Arac\u0131m\u0131 Geli\u015ftirme Karar\u0131<\/h2>\n  <p>Kar\u015f\u0131la\u015ft\u0131\u011f\u0131m bu da\u011f\u0131n\u0131kl\u0131k sorunuyla ba\u015fa \u00e7\u0131kmak i\u00e7in \u00e7e\u015fitli haz\u0131r ara\u00e7lar\u0131 ara\u015ft\u0131rmaya ba\u015flad\u0131m. Ancak, her deponun kendine \u00f6zg\u00fc ihtiya\u00e7lar\u0131 ve benim belirledi\u011fim spesifik temizlik kurallar\u0131 oldu\u011fu i\u00e7in, bu haz\u0131r ara\u00e7lar\u0131n benim beklentilerimi tam olarak kar\u015f\u0131lamad\u0131\u011f\u0131n\u0131 fark ettim. Kimi ara\u00e7lar \u00e7ok geneldi, kimi ara\u00e7lar ise belirli bir dil veya teknoloji y\u0131\u011f\u0131n\u0131na odaklanm\u0131\u015ft\u0131. Bu noktada, kendi ihtiya\u00e7lar\u0131ma en uygun \u00e7\u00f6z\u00fcm\u00fc kendim \u00fcretmenin daha verimli olaca\u011f\u0131na karar verdim. Go (Golang) dilini se\u00e7memin birka\u00e7 \u00f6nemli nedeni vard\u0131. \u00d6ncelikle, Go'nun sundu\u011fu y\u00fcksek performans ve e\u015fzamanl\u0131l\u0131k (concurrency) yetenekleri, y\u00fczlerce depoyu h\u0131zl\u0131 bir \u015fekilde i\u015flemek i\u00e7in idealdi. A\u011f i\u015flemleri ve dosya sistemi operasyonlar\u0131 konusunda olduk\u00e7a yetenekli olmas\u0131, GitHub API'si ile etkile\u015fim kurmak ve yerel dosya sisteminde temizlik yapmak i\u00e7in bana b\u00fcy\u00fck bir avantaj sa\u011flad\u0131. \u0130kinci olarak, Go'nun basit ve okunabilir s\u00f6zdizimi (syntax), arac\u0131n geli\u015ftirilmesini ve s\u00fcrd\u00fcr\u00fclmesini kolayla\u015ft\u0131rd\u0131. \u00dc\u00e7\u00fcnc\u00fc olarak, Go'nun statik tipleme (static typing) \u00f6zelli\u011fi, derleme zaman\u0131nda hatalar\u0131 yakalamama yard\u0131mc\u0131 oldu, bu da daha sa\u011flam bir ara\u00e7 olu\u015fturmam\u0131 sa\u011flad\u0131. Son olarak, Go ekosistemindeki g\u00fc\u00e7l\u00fc k\u00fct\u00fcphaneler (\u00f6rne\u011fin, GitHub API'si ile etkile\u015fim kurmak i\u00e7in kullanabilece\u011fim paketler), geli\u015ftirme s\u00fcrecini h\u0131zland\u0131rd\u0131. Bu kararl\u0131l\u0131kla, kendi \u00f6zel ihtiya\u00e7lar\u0131m\u0131 kar\u015f\u0131layan, esnek ve g\u00fc\u00e7l\u00fc bir otomasyon arac\u0131 geli\u015ftirmeye odakland\u0131m. Bu, sadece depolar\u0131m\u0131 temizlemekle kalmayacak, ayn\u0131 zamanda gelecekte benzer sorunlarla kar\u015f\u0131la\u015ft\u0131\u011f\u0131mda kullanabilece\u011fim de\u011ferli bir ara\u00e7 haline gelecekti.<\/p>\n\n  <h3>Neden Go Dilini Tercih Ettim?<\/h3>\n  <p>Go dilini tercih etmemin temelinde yatan motivasyonlar, projenin gerektirdi\u011fi performans, e\u015fzamanl\u0131l\u0131k ve geli\u015ftirme kolayl\u0131\u011f\u0131yd\u0131. GitHub API'si ile etkile\u015fim kurarken veya yerel dosya sisteminde i\u015flemler yaparken, bir\u00e7ok i\u015flemi ayn\u0131 anda ger\u00e7ekle\u015ftirmek gerekiyordu. Go'nun goroutine'leri ve kanallar\u0131 (channels) gibi e\u015fzamanl\u0131l\u0131k \u00f6zellikleri, bu t\u00fcr g\u00f6revleri son derece verimli bir \u015fekilde y\u00f6netmeme olanak tan\u0131d\u0131. \u00d6rne\u011fin, her bir depo i\u00e7in ayr\u0131 bir goroutine ba\u015flatarak, API isteklerini veya dosya i\u015flemlerini paralel olarak y\u00fcr\u00fctebildim. Bu, i\u015flemin toplam s\u00fcresini dramatik \u015fekilde azaltt\u0131. Ayr\u0131ca, Go'nun derlenmi\u015f (compiled) bir dil olmas\u0131, arac\u0131m\u0131n \u00e7al\u0131\u015fma zaman\u0131nda ek bir ba\u011f\u0131ml\u0131l\u0131\u011fa ihtiya\u00e7 duymadan do\u011frudan \u00e7al\u0131\u015fabilmesini sa\u011flad\u0131. Bu, arac\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 ve kullan\u0131m\u0131n\u0131 kolayla\u015ft\u0131rd\u0131. Go'nun standart k\u00fct\u00fcphanesi de olduk\u00e7a kapsaml\u0131d\u0131r. A\u011f programlama, dosya y\u00f6netimi, JSON i\u015fleme gibi bir\u00e7ok temel ihtiyac\u0131m\u0131 kar\u015f\u0131layacak haz\u0131r paketler mevcuttu. Bu, s\u0131f\u0131rdan karma\u015f\u0131k \u00e7\u00f6z\u00fcmler geli\u015ftirmem gerekmedi\u011fi anlam\u0131na geliyordu. Son olarak, Go'nun basit ve anla\u015f\u0131l\u0131r s\u00f6zdizimi, kodun okunabilirli\u011fini art\u0131rd\u0131. Bu, hem benim hem de gelecekte projeye dahil olabilecek ba\u015fka geli\u015ftiricilerin kodu kolayca anlamas\u0131n\u0131 ve \u00fczerinde de\u011fi\u015fiklik yapmas\u0131n\u0131 sa\u011flad\u0131. T\u00fcm bu fakt\u00f6rler bir araya geldi\u011finde, Go'nun bu \u00f6zel proje i\u00e7in en uygun dil oldu\u011funa karar verdim.<\/p>\n\n  <h2>Ara\u00e7 Geli\u015ftirme S\u00fcreci: Ad\u0131m Ad\u0131m Yakla\u015f\u0131m<\/h2>\n  <p>Arac\u0131m\u0131n geli\u015ftirme s\u00fcreci, mod\u00fcler bir yakla\u015f\u0131mla ilerledi. \u00d6ncelikle, GitHub API'si ile etkile\u015fim kuracak temel i\u015flevleri tan\u0131mlad\u0131m. Bu, kullan\u0131c\u0131n\u0131n kimlik bilgilerini g\u00fcvenli bir \u015fekilde y\u00f6netmek, belirli bir kullan\u0131c\u0131ya ait t\u00fcm depolar\u0131 listeleyebilmek ve her bir depo i\u00e7in temel bilgileri (isim, URL, son commit tarihi vb.) \u00e7ekebilmek anlam\u0131na geliyordu. Bu a\u015famada, GitHub API'sine y\u00f6nelik haz\u0131r Go paketlerini kulland\u0131m. Bu paketler, OAuth token y\u00f6netimi, istek g\u00f6nderme ve yan\u0131tlar\u0131 i\u015fleme gibi karma\u015f\u0131k detaylarla u\u011fra\u015fmam\u0131 engelledi. Ard\u0131ndan, her depo i\u00e7in uygulanacak temizlik kurallar\u0131n\u0131 belirledim. Bu kurallar \u015funlar\u0131 i\u00e7eriyordu: 1. Gereksiz dosya ve klas\u00f6rlerin tespiti ve silinmesi (\u00f6rne\u011fin, <code>node_modules<\/code>, <code>.DS_Store<\/code>, ge\u00e7ici log dosyalar\u0131). 2. Eski veya kullan\u0131lmayan branch'lerin belirlenmesi. 3. README dosyalar\u0131n\u0131n g\u00fcncelli\u011finin kontrol edilmesi ve eksikse standart bir \u015fablonla olu\u015fturulmas\u0131. 4. Lisans dosyas\u0131n\u0131n varl\u0131\u011f\u0131n\u0131n kontrol edilmesi. 5. <code>.gitignore<\/code> dosyas\u0131n\u0131n eksiksizli\u011finin sa\u011flanmas\u0131. Bu kurallar\u0131 uygulayacak mod\u00fclleri ayr\u0131 ayr\u0131 geli\u015ftirdim. Her mod\u00fcl, belirli bir temizlik g\u00f6revini yerine getirecek \u015fekilde tasarland\u0131. \u00d6rne\u011fin, <code>file_cleaner<\/code> mod\u00fcl\u00fc, belirli dosya uzant\u0131lar\u0131na veya isimlerine sahip dosyalar\u0131 silerken, <code>branch_manager<\/code> mod\u00fcl\u00fc eski branch'leri tespit edip silme i\u015flemini y\u00f6netiyordu. Bu mod\u00fcler yap\u0131, hem geli\u015ftirme s\u00fcrecini kolayla\u015ft\u0131rd\u0131 hem de ileride yeni temizlik kurallar\u0131 eklemeyi veya mevcutlar\u0131 de\u011fi\u015ftirmeyi m\u00fcmk\u00fcn k\u0131ld\u0131. Son olarak, t\u00fcm bu mod\u00fclleri bir araya getiren ana bir uygulama mant\u0131\u011f\u0131 olu\u015fturdum. Bu mant\u0131k, kullan\u0131c\u0131n\u0131n belirledi\u011fi parametrelere g\u00f6re (\u00f6rne\u011fin, sadece belirli bir depoyu temizle, sadece README dosyas\u0131n\u0131 kontrol et vb.) hangi mod\u00fcllerin \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirliyordu. Ayr\u0131ca, kullan\u0131c\u0131ya geri bildirim sa\u011flayan bir loglama sistemi de ekledim. Bu sayede, hangi i\u015flemlerin yap\u0131ld\u0131\u011f\u0131, hangi dosyalar\u0131n silindi\u011fi ve olas\u0131 hatalar hakk\u0131nda bilgi sahibi olabiliyordum.<\/p>\n\n  <h3>GitHub API'si ile Etkile\u015fim Nas\u0131l Kuruldu?<\/h3>\n  <p>GitHub API'si ile etkile\u015fim kurmak, arac\u0131m\u0131n temelini olu\u015fturuyordu. Bu etkile\u015fim, \u00f6ncelikle kullan\u0131c\u0131n\u0131n GitHub hesab\u0131na eri\u015fim izni vermesini gerektiriyordu. Bunun i\u00e7in OAuth 2.0 protokol\u00fcn\u00fc kulland\u0131m. Kullan\u0131c\u0131, uygulamama belirli izinler (\u00f6rne\u011fin, depolar\u0131 okuma ve yazma) vererek bir eri\u015fim token'\u0131 (access token) elde ediyordu. Bu token, daha sonra API isteklerinde kimlik do\u011frulamas\u0131 i\u00e7in kullan\u0131l\u0131yordu. Go dilinde, bu s\u00fcreci kolayla\u015ft\u0131ran <code>go-github<\/code> gibi pop\u00fcler k\u00fct\u00fcphaneler bulunuyor. Bu k\u00fct\u00fcphaneler, API u\u00e7 noktalar\u0131na (endpoints) y\u00f6nelik haz\u0131r fonksiyonlar sunarak, karma\u015f\u0131k HTTP istekleri olu\u015fturma ve yan\u0131tlar\u0131 ayr\u0131\u015ft\u0131rma gibi i\u015flemleri basitle\u015ftiriyor. \u00d6rne\u011fin, belirli bir kullan\u0131c\u0131ya ait t\u00fcm depolar\u0131 listelemek i\u00e7in <code>client.Repositories.List()<\/code> gibi bir fonksiyon kullanabiliyordum. Bu fonksiyon, gerekli parametrelerle \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, kullan\u0131c\u0131n\u0131n depolar\u0131n\u0131n bir listesini JSON format\u0131nda d\u00f6nd\u00fcr\u00fcyordu. Bu JSON yan\u0131t\u0131n\u0131 Go'nun <code>encoding\/json<\/code> paketiyle kolayca Go struct'lar\u0131na d\u00f6n\u00fc\u015ft\u00fcrebiliyordum. Benzer \u015fekilde, bir depodaki dosyalar\u0131 listelemek, dosya i\u00e7eri\u011fini okumak veya branch'leri y\u00f6netmek i\u00e7in de <code>go-github<\/code> k\u00fct\u00fcphanesinin sa\u011flad\u0131\u011f\u0131 fonksiyonlar\u0131 kulland\u0131m. G\u00fcvenlik a\u00e7\u0131s\u0131ndan, eri\u015fim token'lar\u0131n\u0131 do\u011frudan kod i\u00e7ine g\u00f6mmek yerine, ortam de\u011fi\u015fkenleri (environment variables) veya yap\u0131land\u0131rma dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6nettim. Bu, token'lar\u0131n yanl\u0131\u015fl\u0131kla herkese a\u00e7\u0131k hale gelmesini engelledi. Ayr\u0131ca, API isteklerinin h\u0131z s\u0131n\u0131rlar\u0131na (rate limits) dikkat etmek de \u00f6nemliydi. GitHub API'si, belirli bir zaman diliminde yap\u0131labilecek istek say\u0131s\u0131n\u0131 s\u0131n\u0131rlar. Bu s\u0131n\u0131rlara tak\u0131lmamak i\u00e7in, istekler aras\u0131nda k\u0131sa gecikmeler ekleyerek veya e\u015fzamanl\u0131l\u0131k mekanizmalar\u0131n\u0131 kullanarak API'yi daha nazik bir \u015fekilde kulland\u0131m.<\/p>\n\n  <h3>Temizlik Kurallar\u0131n\u0131n Tan\u0131mlanmas\u0131 ve Uygulanmas\u0131<\/h3>\n  <p>Temizlik kurallar\u0131n\u0131 belirlemek, projenin amac\u0131na ve benim ki\u015fisel tercihlerime g\u00f6re \u015fekillendi. \u0130lk ad\u0131m olarak, GitHub'daki projelerimde s\u0131k\u00e7a kar\u015f\u0131la\u015ft\u0131\u011f\u0131m gereksiz dosya ve klas\u00f6rleri listeledim. Bunlar aras\u0131nda, geli\u015ftirme ortam\u0131na \u00f6zg\u00fc ge\u00e7ici dosyalar (<code>.DS_Store<\/code>, <code>Thumbs.db<\/code>), dil paketlerine \u00f6zg\u00fc ba\u011f\u0131ml\u0131l\u0131k klas\u00f6rleri (<code>node_modules<\/code>, <code>vendor<\/code>), derleme \u00e7\u0131kt\u0131lar\u0131 (<code>build<\/code>, <code>dist<\/code>) ve log dosyalar\u0131 gibi genellikle s\u00fcr\u00fcm kontrol sistemine dahil edilmemesi gereken \u00f6\u011feler bulunuyordu. Bu dosyalar\u0131 ve klas\u00f6rleri silmek i\u00e7in basit bir dosya yolu ve dosya ad\u0131 e\u015fle\u015ftirme mant\u0131\u011f\u0131 geli\u015ftirdim. \u00d6rne\u011fin, <code>.gitignore<\/code> dosyas\u0131nda tan\u0131ml\u0131 olan ancak yine de depoya eklenmi\u015f olabilecek dosyalar\u0131 da bu listeye dahil ettim. \u0130kinci olarak, g\u00fcncel olmayan veya art\u0131k kullan\u0131lmayan branch'leri tespit etmek istedim. Bu, genellikle ana branch (genellikle <code>main<\/code> veya <code>master<\/code>) d\u0131\u015f\u0131nda kalan ve uzun s\u00fcredir g\u00fcncellenmemi\u015f branch'lerdi. Bu branch'leri belirlemek i\u00e7in, her bir branch'in son commit tarihini kontrol ettim ve belirli bir e\u015fi\u011fin (\u00f6rne\u011fin, 6 aydan eski) \u00fczerindeyse bunlar\u0131 potansiyel olarak silinebilir olarak i\u015faretledim. Ancak, bu i\u015flemi otomatik olarak yapmadan \u00f6nce kullan\u0131c\u0131ya bir onay sorma mekanizmas\u0131 ekledim, \u00e7\u00fcnk\u00fc yanl\u0131\u015fl\u0131kla \u00f6nemli bir branch'i silmek istemezdim. \u00dc\u00e7\u00fcnc\u00fc olarak, README dosyalar\u0131n\u0131n \u00f6nemini g\u00f6z \u00f6n\u00fcnde bulundurdum. Her proje i\u00e7in bir README dosyas\u0131n\u0131n olmas\u0131, projenin ne hakk\u0131nda oldu\u011funu, nas\u0131l kurulaca\u011f\u0131n\u0131 ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 anlamak i\u00e7in kritik \u00f6neme sahiptir. Arac\u0131m, README dosyas\u0131n\u0131n varl\u0131\u011f\u0131n\u0131 kontrol ediyor ve e\u011fer yoksa, temel bilgileri i\u00e7eren standart bir Markdown \u015fablonu olu\u015fturuyordu. D\u00f6rd\u00fcnc\u00fc olarak, lisans dosyas\u0131n\u0131n (LICENSE) varl\u0131\u011f\u0131n\u0131 kontrol ettim. A\u00e7\u0131k kaynak projelerde lisans, projenin nas\u0131l kullan\u0131labilece\u011fini belirleyen yasal bir belgedir. Lisans dosyas\u0131n\u0131n eksik olmas\u0131, projenin kullan\u0131m\u0131n\u0131 belirsiz hale getirebilir. Son olarak, <code>.gitignore<\/code> dosyas\u0131n\u0131n etkinli\u011fini de kontrol ettim. Bu dosya, s\u00fcr\u00fcm kontrol sistemine hangi dosyalar\u0131n dahil edilmemesi gerekti\u011fini belirtir. E\u011fer <code>.gitignore<\/code> dosyas\u0131 eksikse veya gereksiz dosyalar\u0131 i\u00e7ermiyorsa, bu durum ileride sorunlara yol a\u00e7abilir. Bu kurallar\u0131 uygularken, her ad\u0131mda kullan\u0131c\u0131ya bilgi veren ve onay isteyen bir aray\u00fcz tasarlamaya \u00f6zen g\u00f6sterdim. Bu, arac\u0131n g\u00fcvenli ve kontroll\u00fc bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flad\u0131.<\/p>\n\n  <h2>Ara\u00e7 Kullan\u0131m\u0131 ve Ger\u00e7ek D\u00fcnya Senaryolar\u0131<\/h2>\n  <p>Arac\u0131m\u0131n kullan\u0131m\u0131 olduk\u00e7a basittir. Komut sat\u0131r\u0131ndan \u00e7al\u0131\u015ft\u0131r\u0131lan ara\u00e7, kullan\u0131c\u0131n\u0131n GitHub token'\u0131n\u0131 ve temizlenecek depo bilgilerini al\u0131r. Kullan\u0131c\u0131, belirli bir depoyu, t\u00fcm depolar\u0131 veya belirli bir filtreye uyan depolar\u0131 temizlemeyi se\u00e7ebilir. \u00d6rne\u011fin, <code>github-cleaner --repo=my-awesome-project --rules=all<\/code> komutu, <code>my-awesome-project<\/code> isimli depodaki t\u00fcm tan\u0131ml\u0131 temizlik kurallar\u0131n\u0131 uygular. <code>github-cleaner --all-repos --rule=readme-check<\/code> komutu ise kullan\u0131c\u0131n\u0131n t\u00fcm depolar\u0131ndaki README dosyalar\u0131n\u0131 kontrol eder ve eksik olanlara standart bir \u015fablon ekler. Bu esneklik, farkl\u0131 ihtiya\u00e7lara g\u00f6re \u00f6zelle\u015ftirilmi\u015f temizlik i\u015flemleri yapmaya olanak tan\u0131r. Ger\u00e7ek d\u00fcnya senaryolar\u0131na bakt\u0131\u011f\u0131m\u0131zda, bu ara\u00e7 bir\u00e7ok farkl\u0131 durumda faydal\u0131 olabilir. \u00d6rne\u011fin, bir yaz\u0131l\u0131m geli\u015ftirme ekibinde, her geli\u015ftiricinin kendi depolar\u0131n\u0131 d\u00fczenli tutmas\u0131n\u0131 sa\u011flamak i\u00e7in bu ara\u00e7 kullan\u0131labilir. Bu, ekip genelinde daha temiz ve tutarl\u0131 bir kod taban\u0131 olu\u015fturulmas\u0131na yard\u0131mc\u0131 olur. Bir ba\u015fka senaryo, a\u00e7\u0131k kaynak projelere katk\u0131da bulunan geli\u015ftiriciler i\u00e7in ge\u00e7erlidir. Bu t\u00fcr projelerde, katk\u0131da bulunmadan \u00f6nce depo yap\u0131s\u0131n\u0131n temiz ve anla\u015f\u0131l\u0131r olmas\u0131, yeni katk\u0131da bulunanlar\u0131n projeye daha kolay adapte olmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, freelance \u00e7al\u0131\u015fan veya ki\u015fisel projelerini sergilemek isteyen geli\u015ftiriciler i\u00e7in de temiz bir GitHub profili, profesyonel bir imaj \u00e7izmek a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Kendi deneyimimde, bu ara\u00e7 sayesinde yakla\u015f\u0131k 150'den fazla depomu birka\u00e7 saat i\u00e7inde d\u00fczenleyebildim. Bu, manuel olarak yap\u0131ld\u0131\u011f\u0131nda haftalar s\u00fcrebilecek bir i\u015flemdi. Eski, gereksiz dosyalar silindi, g\u00fcncel olmayan branch'ler temizlendi ve her depo i\u00e7in standart bir README dosyas\u0131 olu\u015fturuldu. Bu, hem depolara olan eri\u015fimi kolayla\u015ft\u0131rd\u0131 hem de GitHub profilimin \u00e7ok daha profesyonel g\u00f6r\u00fcnmesini sa\u011flad\u0131. \u00d6zellikle, uzun s\u00fcredir unutulmu\u015f birka\u00e7 projemdeki g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 tespit etmeme ve bunlar\u0131 gidermeme de yard\u0131mc\u0131 oldu.<\/p>\n\n  <h3>Vaka Analizi: Unutulmu\u015f Bir Projeyi Canland\u0131rmak<\/h3>\n  <p>Bir s\u00fcre \u00f6nce, yakla\u015f\u0131k \u00fc\u00e7 y\u0131l \u00f6nce \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m ve sonra yar\u0131m b\u0131rakt\u0131\u011f\u0131m bir web uygulamas\u0131 projesini yeniden ele almak istedim. Proje, GitHub'da da\u011f\u0131n\u0131k bir halde duruyordu; <code>node_modules<\/code> klas\u00f6rleri \u015fi\u015fmi\u015fti, eski deneme branch'leri duruyordu ve en \u00f6nemlisi, projenin ne hakk\u0131nda oldu\u011funu veya nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 hat\u0131rlamak zordu \u00e7\u00fcnk\u00fc README dosyas\u0131 eksikti ve yetersizdi. Bu durumda, geli\u015ftirdi\u011fim Go arac\u0131n\u0131 kulland\u0131m. \u0130lk olarak, <code>github-cleaner --repo=old-web-app --rule=all<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131m. Ara\u00e7, depoyu tarayarak gereksiz <code>node_modules<\/code> klas\u00f6rlerini, eski log dosyalar\u0131n\u0131 ve <code>.DS_Store<\/code> gibi i\u015fletim sistemine \u00f6zg\u00fc dosyalar\u0131 tespit edip sildi. Ard\u0131ndan, uzun s\u00fcredir g\u00fcncellenmemi\u015f deneme branch'lerini belirledi ve bana hangi branch'leri silmek istedi\u011fimi sordu. Ben de art\u0131k gereksiz olanlar\u0131 onaylad\u0131m. En kritik ad\u0131m ise README dosyas\u0131n\u0131n yeniden olu\u015fturulmas\u0131yd\u0131. Ara\u00e7, projenin ana dizininde bir README.md dosyas\u0131 olu\u015fturdu ve i\u00e7ine projenin amac\u0131n\u0131, kurulum ad\u0131mlar\u0131n\u0131 ve temel kullan\u0131m bilgilerini i\u00e7eren standart bir \u015fablon yerle\u015ftirdi. Bu \u015fablonu daha sonra projenin i\u00e7eri\u011fine g\u00f6re g\u00fcncelledim. Sonu\u00e7 olarak, birka\u00e7 dakika i\u00e7inde, unutulmu\u015f ve karma\u015f\u0131k g\u00f6r\u00fcnen depom, anla\u015f\u0131l\u0131r, temiz ve g\u00fcncel bir hale geldi. Bu sayede projeyi yeniden inceleyip, kald\u0131\u011f\u0131m yerden devam etme motivasyonu buldum. Bu vaka analizi, arac\u0131m\u0131n sadece y\u00fczeysel bir temizlik yapmad\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda projelerin yeniden hayata d\u00f6nd\u00fcr\u00fclmesinde de ne kadar etkili olabilece\u011fini g\u00f6steriyor.<\/p>\n\n  <h2>\u0130leri D\u00fczey Kullan\u0131m ve \u00d6zelle\u015ftirme \u0130pu\u00e7lar\u0131<\/h2>\n  <p>Arac\u0131m\u0131 daha da geli\u015ftirmek ve \u00f6zelle\u015ftirmek i\u00e7in baz\u0131 ileri d\u00fczey \u00f6zellikler eklemeyi d\u00fc\u015f\u00fcnd\u00fcm. Bunlardan biri, yapay zeka (AI) destekli kod analiziydi. Bu \u00f6zellik, sadece dosya isimlerine veya uzant\u0131lar\u0131na g\u00f6re de\u011fil, ayn\u0131 zamanda kodun i\u00e7eri\u011fine bakarak da gereksiz veya eski kod bloklar\u0131n\u0131 tespit edebilirdi. \u00d6rne\u011fin, art\u0131k kullan\u0131lmayan fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131 veya eski API kullan\u0131mlar\u0131n\u0131 belirleyebilirdi. Bir di\u011fer geli\u015fmi\u015f \u00f6zellik, ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimini daha ak\u0131ll\u0131 hale getirmekti. Arac\u0131m, projedeki ba\u011f\u0131ml\u0131l\u0131klar\u0131n g\u00fcncel olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilir ve g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 bilinen k\u00fct\u00fcphaneleri tespit edip g\u00fcncellemeyi \u00f6nerebilirdi. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde \u00f6nemli bir g\u00fcvenlik katman\u0131 sa\u011flar. \u00d6zelle\u015ftirme a\u00e7\u0131s\u0131ndan bak\u0131ld\u0131\u011f\u0131nda, arac\u0131n kural setlerini kullan\u0131c\u0131lar\u0131n kendi ihtiya\u00e7lar\u0131na g\u00f6re tan\u0131mlamas\u0131na olanak tan\u0131yan bir eklenti (plugin) sistemi d\u00fc\u015f\u00fcnd\u00fcm. Bu sayede, her geli\u015ftirici veya ekip, kendi \u00f6zel temizlik kurallar\u0131n\u0131 belirleyip araca entegre edebilirdi. \u00d6rne\u011fin, belirli bir yaz\u0131l\u0131m \u00e7er\u00e7evesine (framework) \u00f6zg\u00fc gereksiz dosyalar\u0131 veya yap\u0131land\u0131rmalar\u0131 temizlemek i\u00e7in \u00f6zel eklentiler yaz\u0131labilir. Ayr\u0131ca, arac\u0131n CI\/CD (Continuous Integration\/Continuous Deployment - S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) s\u00fcre\u00e7lerine entegre edilebilmesi de \u00f6nemli bir geli\u015fme olurdu. Bu sayede, her kod g\u00f6nderiminde (commit) veya birle\u015ftirme (merge) i\u015fleminde depolar otomatik olarak temizlenebilir ve g\u00fcvenlik kontrolleri yap\u0131labilirdi. Bu t\u00fcr bir entegrasyon, proje kalitesini s\u00fcrekli olarak y\u00fcksek tutmaya yard\u0131mc\u0131 olur.<\/p>\n\n  <h3>Kendi Temizlik Kurallar\u0131n\u0131z\u0131 Nas\u0131l Olu\u015fturursunuz?<\/h3>\n  <p>Kendi temizlik kurallar\u0131n\u0131z\u0131 olu\u015fturmak, arac\u0131n en g\u00fc\u00e7l\u00fc yanlar\u0131ndan biridir. Arac\u0131m, kurallar\u0131n bir yap\u0131land\u0131rma dosyas\u0131 (\u00f6rne\u011fin, JSON veya YAML format\u0131nda) arac\u0131l\u0131\u011f\u0131yla tan\u0131mlanmas\u0131na olanak tan\u0131r. Bu dosya, arac\u0131n uygulayaca\u011f\u0131 her bir kural i\u00e7in belirli parametreler i\u00e7erir. \u00d6rne\u011fin, bir \"dosya silme\" kural\u0131 i\u00e7in dosya ad\u0131 deseni (pattern), dosya uzant\u0131s\u0131, dosyan\u0131n bulundu\u011fu dizin ve silme i\u015fleminin onay gerektirip gerektirmedi\u011fi gibi bilgiler belirtilebilir. Bir \"branch silme\" kural\u0131 i\u00e7in ise, branch'in ne kadar s\u00fcredir g\u00fcncellenmedi\u011fi (e\u015fik de\u011feri) ve ana branch ile aras\u0131ndaki fark gibi kriterler tan\u0131mlanabilir. Kendi kurallar\u0131n\u0131z\u0131 olu\u015ftururken, \u00f6ncelikle GitHub depolar\u0131n\u0131zda en s\u0131k kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z gereksiz \u00f6\u011feleri belirlemelisiniz. Bu, genellikle proje t\u00fcr\u00fcne (\u00f6rne\u011fin, web uygulamas\u0131, mobil uygulama, veri bilimi projesi) ve kullan\u0131lan teknoloji y\u0131\u011f\u0131n\u0131na (\u00f6rne\u011fin, JavaScript, Python, Go) g\u00f6re de\u011fi\u015fiklik g\u00f6sterecektir. \u00d6rne\u011fin, bir Node.js projesinde <code>node_modules<\/code> klas\u00f6r\u00fcn\u00fc silmek yayg\u0131n bir kuralken, bir Python projesinde sanal ortam (virtual environment) klas\u00f6rlerini temizlemek gerekebilir. Kurallar\u0131n\u0131z\u0131 olu\u015ftururken, olas\u0131 yanl\u0131\u015f pozitifleri (yanl\u0131\u015fl\u0131kla \u00f6nemli bir dosyay\u0131 silme) en aza indirmek i\u00e7in dikkatli olmal\u0131s\u0131n\u0131z. Bu nedenle, her zaman bir onay mekanizmas\u0131 eklemeyi d\u00fc\u015f\u00fcnebilirsiniz. Ayr\u0131ca, kurallar\u0131n\u0131z\u0131 daha genel hale getirmeye \u00e7al\u0131\u015f\u0131n. \u00d6rne\u011fin, sadece belirli bir dosya ad\u0131n\u0131 silmek yerine, belirli bir desenle e\u015fle\u015fen t\u00fcm dosyalar\u0131 silmek daha esnek bir \u00e7\u00f6z\u00fcm sunar. Son olarak, olu\u015fturdu\u011funuz kurallar\u0131 test etmek i\u00e7in \u00f6nce tek bir depoda deneyin ve sonu\u00e7lar\u0131 dikkatlice g\u00f6zden ge\u00e7irin. Bu, arac\u0131n beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olman\u0131z\u0131 sa\u011flar.<\/p>\n\n  <h2>Sonu\u00e7 ve Gelecek Planlar\u0131<\/h2>\n  <p>150'den fazla GitHub deponuzu Go ile yazd\u0131\u011f\u0131m kendi otomasyon arac\u0131 sayesinde temizlemek, hem verimlili\u011fimi art\u0131rd\u0131 hem de dijital ayak izimi \u00e7ok daha profesyonel bir hale getirdi. Bu s\u00fcre\u00e7, sadece kod yazmakla kalmay\u0131p, ayn\u0131 zamanda kar\u015f\u0131la\u015ft\u0131\u011f\u0131m problemleri analiz etme, \u00e7\u00f6z\u00fcmler \u00fcretme ve kendi ara\u00e7lar\u0131m\u0131 geli\u015ftirme becerimi de peki\u015ftirdi. Arac\u0131m, GitHub API'si ile etkile\u015fim kurma, e\u015fzamanl\u0131l\u0131k yeteneklerini kullanma ve mod\u00fcler bir yap\u0131 olu\u015fturma gibi konularda bana \u00f6nemli deneyimler kazand\u0131rd\u0131. Gelecek planlar\u0131m aras\u0131nda, arac\u0131 daha da geli\u015ftirmek yer al\u0131yor. Yapay zeka destekli kod analizi, ak\u0131ll\u0131 ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi ve eklenti sistemi gibi \u00f6zellikler, arac\u0131n yeteneklerini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r. Ayr\u0131ca, arac\u0131 daha geni\u015f bir kitleye ula\u015ft\u0131rmak ve a\u00e7\u0131k kaynak haline getirmek de hedeflerim aras\u0131nda. Bu sayede, benim gibi depolar\u0131n\u0131 d\u00fczenleme sorunu ya\u015fayan di\u011fer geli\u015ftiricilere de yard\u0131mc\u0131 olabilirim. Bu makale arac\u0131l\u0131\u011f\u0131yla, kendi ara\u00e7lar\u0131n\u0131z\u0131 geli\u015ftirmenin ve tekrarlayan g\u00f6revleri otomatikle\u015ft\u0131rmenin, yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecinizi nas\u0131l daha verimli ve keyifli hale getirebilece\u011fini g\u00f6stermeyi umuyorum.<\/p>\n\n  <h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n  <ul>\n    <li>\n      <strong>Soru: Bu ara\u00e7 t\u00fcm programlama dilleri i\u00e7in ge\u00e7erli mi?<\/strong>\n      <p>Cevap: Evet, arac\u0131n temel i\u015flevleri (depo listeleme, dosya silme, branch y\u00f6netimi) programlama dilinden ba\u011f\u0131ms\u0131zd\u0131r. Ancak, belirli dil paketlerine \u00f6zg\u00fc temizlik kurallar\u0131n\u0131 \u00f6zelle\u015ftirebilirsiniz. \u00d6rne\u011fin, bir Python projesindeki sanal ortam dosyalar\u0131n\u0131 silmek veya bir JavaScript projesindeki <code>node_modules<\/code> klas\u00f6r\u00fcn\u00fc temizlemek gibi.<\/p>\n    <\/li>\n    <li>\n      <strong>Soru: Arac\u0131n\u0131z GitHub'\u0131n h\u0131z s\u0131n\u0131rlar\u0131na (rate limits) tak\u0131l\u0131r m\u0131?<\/strong>\n      <p>Cevap: Arac\u0131m, GitHub API'sinin h\u0131z s\u0131n\u0131rlar\u0131na dikkat edecek \u015fekilde tasarland\u0131. \u0130stekler aras\u0131nda otomatik gecikmeler eklenerek ve e\u015fzamanl\u0131l\u0131k y\u00f6netimi ile bu sorun en aza indirilmi\u015ftir. Ancak, \u00e7ok yo\u011fun kullan\u0131m durumlar\u0131nda yine de dikkatli olmak gerekebilir.<\/p>\n    <\/li>\n    <li>\n      <strong>Soru: Arac\u0131n\u0131z\u0131n kullan\u0131m\u0131n\u0131 geri almak m\u00fcmk\u00fcn m\u00fc?<\/strong>\n      <p>Cevap: Arac\u0131m, silme i\u015flemleri gibi geri d\u00f6n\u00fc\u015f\u00fc olmayan eylemlerden \u00f6nce kullan\u0131c\u0131dan onay al\u0131r. Ancak, silinen dosyalar\u0131n kurtar\u0131lmas\u0131 genellikle zordur. Bu nedenle, \u00f6nemli verilerin yedeklenmesi her zaman \u00f6nerilir. Arac\u0131n sundu\u011fu loglama \u00f6zelli\u011fi, hangi i\u015flemlerin yap\u0131ld\u0131\u011f\u0131n\u0131 takip etmenizi sa\u011flar.<\/p>\n    <\/li>\n    <li>\n      <strong>Soru: Arac\u0131n\u0131z\u0131 nas\u0131l kurabilir ve kullanabilirim?<\/strong>\n      <p>Cevap: \u015eu anda ara\u00e7 a\u00e7\u0131k kaynak olarak payla\u015f\u0131lmam\u0131\u015f olsa da, gelecekte GitHub'da yay\u0131nlanmas\u0131 planlanmaktad\u0131r. Yay\u0131nland\u0131\u011f\u0131nda, kurulum ve kullan\u0131m talimatlar\u0131 detayl\u0131 bir \u015fekilde README dosyas\u0131nda a\u00e7\u0131klanacakt\u0131r. Temel olarak Go dilinin kurulu olmas\u0131 ve komut sat\u0131r\u0131 \u00fczerinden \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekecektir.<\/p>\n    <\/li>\n  <\/ul>\n\n  <p>#Teknoloji #GitHub #Go #Otomasyon #Yaz\u0131l\u0131mGeli\u015ftirme<\/p>\n<\/body><\/pre>\n<p><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m! GitHub&#8217;daki da\u011f\u0131n\u0131k depolar\u0131n\u0131z\u0131 d\u00fczenlemek i\u00e7in bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz?","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":[1401],"tags":[],"class_list":{"0":"post-41518","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","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>150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m! - 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\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!\" \/>\n<meta property=\"og:description\" content=\"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m! GitHub&#039;daki da\u011f\u0131n\u0131k depolar\u0131n\u0131z\u0131 d\u00fczenlemek i\u00e7in bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-30T18:02:15+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\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!\",\"datePublished\":\"2026-04-30T18:02:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/\"},\"wordCount\":11,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/\",\"name\":\"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m! - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-04-30T18:02:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!\"}]},{\"@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":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m! - 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\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/","og_locale":"tr_TR","og_type":"article","og_title":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!","og_description":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m! GitHub'daki da\u011f\u0131n\u0131k depolar\u0131n\u0131z\u0131 d\u00fczenlemek i\u00e7in bir \u00e7\u00f6z\u00fcm m\u00fc ar\u0131yorsunuz?","og_url":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-04-30T18:02:15+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\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!","datePublished":"2026-04-30T18:02:15+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/"},"wordCount":11,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/","url":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/","name":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m! - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-04-30T18:02:15+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/150-github-repo-duzenlemesi-go-ile-kendi-aracimi-yazdim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"150+ GitHub Repo D\u00fczenlemesi: Go ile Kendi Arac\u0131m\u0131 Yazd\u0131m!"}]},{"@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\/41518","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=41518"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41518\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}