Google Go(The Go - Go Dili - Go Language)
İşletmeniz için bir uygulama oluşturmayı ve bu dünyaya atılmayı planlıyorsanız. Muhakkak projenizde bir dil seçimi yapmanız gerekiyor. Çünkü, ilk kurulduktan sonra birşeyleri değiştirmek ve üzerinde oynamak her zaman zordur. Eğer ihtiyaçlarınızı verebilecek bir dil seçimi yapmaz iseniz bu bütün uygulamanızı tekrar yazmanız ve baştan başa bir değişiklik yapmanızı zorunlu kılar. Böyle bir durumda hem hayal kırıklığı hemde büyük maliyetlere ister istemez katlanmak zorunda kalırsınız.
Benden genellikle uygulama yaparken nelere dikkat etmeliyiz diyen arkadaşlara, ilk önce uygulamamınız gerekliliklerini belirleyerek uygun bir dil seçimi yapmalarını söylüyorum. Çünkü webde ve uygulamada dil seçimi herşeyden önce gelir, bu konuda ihtiyaçlarınız cevap vermeyecek bir tercihten uzak durmak için biraz dilleri bilmeniz ve bunlar hakkında kabataslak olsada yeteneklerine bilmenizde büyük yarar var.
Bundan dolayı bende bugün Google Go, The Go ve Go Language adlarıyla adlandırılan Go Dilini “Merhaba Dünya” örneğin vermeden nasıl bir şey olduğunu ve ne gibi özellikleri olduğunu elimden geldiğince size anlatmaya çalışacağım.
Go Neden Oluşturuldu?
Go, bundan yaklaşık 11 yıl önce Google’ın bazı projelerinde kullanmış olduğu C++’ın derlenmesi çok fazla zaman alıyordu buda nihayetinde uzun bekleme sürelerine yol açıyordu. Bekleme sürelerinden kaynaklı oluşan darboğazlar için Google, kesin bir çözüm yolu için yeni bir dil oluşturmaya karar verdi. Temel olarak C++ kadar büyük, donanımlı ve kapsamlı özellikleri barındıran ayrıca Python kadar hızlı yeni bir dil ile çözüm bulmaya çalıştılar. Bu çabaların sonunda Go dünyaya tanıtılmış oldu.
Google Go Özellikleri?
Go veya GoLang, açık kaynaklı bir programlama dilidir. Statik temelli bir dildir ve derleniş biçimi makine kodu şeklindedir. Bu bakımından Go’ya aslında 21.Yüzyıl’ın C ‘si demek yanlış olmayacaktır. Go size bazı dillerin vermediği olanakları sunar, Go ile birlikte diğer programlarında çok sıklıkla karşılaşmadığımız güvenlik bir bellek kullanımına sahip olursunuz bence diğer bir güzel özelliğide nesneleri yönetirken eş zamanlı fonksiyonlarından yararlanabilmenizdir.
Eşzamanlılığı merak eden arkadaşlar için kısaca bir açıklama yapayım. Örneğin; bygle.com çevrim içi sitesini ziyaret ettiğiniz zaman aynı anda tarayıcıda farklı görevler yerine getiriliyor. Aynı anda farklı görevlerin icra edilmesine programlamada eşzamanlılık denir.
Go dünyaya ilk defa Rob Pike, Robert Griesemer ve Ken Thompson tarafından duyurulurken temel amaçları aşağıdaki gibiydi;
Hızlı üretkenlikle birlikte kullanım kolaylığı
Statik yazma sayesinde elde edilecek yüksek verimlilik
Ağ iletişimi için geliştirilmiş performans ve çok çekirdekli gücün kullanımı
Derleme süresinin çok hızlı olması
Statik yazma neden hızlı olduğunu şöyle açıklamak gerekiyor, statik yazma ile birlikte aslında bir derleyice veya diğer bir adıyla bildiğmiz engine’ları kullanmamıza gerek kalmaz. Mesela benim sitede kullanmış olduğum JS ‘hem server hemde browserda çalıştırabilmek için gerekli olan V8 motoruna Go gerek duymaz. Go’ya yazmış olduğunuz kodlar direkt olarak makine kodlarına çevrilerek, işlemciniz üzerinde daha az ısınma neden olur ve bunun sonucunda daha hızlı performans almış olursunuz.
2009 yılında piyasaya sürüldükten sonra Go hızlı bir yükselişe geçti ve bu yükseliş 2020 itibariyle devam ediyor. Benim öngörüm ilerleyen yıllarda özellikle Kuzey Amerika kıtasından çıkıp biraz daha dünyanın diğer yerlerinde de hızlı bir yayılmaya sahip olacak. Aşağıda koymuş olduğum listeye bakarsanız ilk çıkış yılında 65 sırada olan Go bugün itibariyle 12. sırada kendine yer alıyor ve yükselmeye devam ediyor. Listenin tamamına ulaşmak isteyen arkadaşlar TIOBE listesine bakabilirler. Bu kadar yeni bir dil olmasına rağmen böyle bir ivme yakalanması aslında Go’nun ne kadar başarılı bir dil olduğunu gösteriyor.
Aklımıza şöyle bir soru geliyor, peki Go neden bu kadar hızlı yükseliyor. Bunun nedeni, Go yukarıda da ifade ettiğim gibi C ile aynı performansa sahip olması, bunun haricinde bakımı hem Java hem de JS ‘e göre çok daha kolay olması, Go ile birlikte sanal makineye(Engine), ısınma süresine ve JAR cehennemi gibi sıkıntılarımızın olmamasıdır.
Go birçok uygulamada kullanılabilir. Sadece belirli alanlar için yapılmış bir dil değil, bu yüzden uygulamanız eğer sistem programlaması, büyük veri analizleri, makine öğrenmesi, ses ve video düzenlemelerini içeriyorsa Go’yu dil tercihlerinde ilk sıraya koyabilirsiniz.
Uygulama geliştirirken ayrıca dikkat etmeniz gereken diğer önemli bir konu bu dilin yazılımcılar arasında ne kadar kullanıldığıdır. Çünkü bir evreden sonra uygulamanız büyüyebilir ve sizin tek başınıza idare etmeniz için gerekli olan kaynağı aşabilir. Bu yüzden bu dilde size yardımcı olacak insanlara ihtiyacınız olacaktır. Bu konuda Go artık sınırları aşmış durumda, eğer bir Go uygulamanız var ise artık rahatlıkla bu konuda uzman insanlara ulaşabilirsiniz, son yapılan 2019 Stackoverflow istatistiklerine bakarsak, Go dünyada en çok sevilen diller arasında 9.sırada yer alıyor. PHP, JS ve Java gibi milyonlarca insanın kullandığı dilleri arkasında bırakmış durumda. (En çok sevilen diller 2019)
Go, diğer dillere göre öğrenmesi kolay olan bir dildir. Eğer güzel bir yazılım alt yapınız var ise çok emek harcamanıza gerek yok. Ayrıca, dokümantasyonu ve ekosistemi en geniş dillerden biridir. Temel yararlarını listelemek gerekirse aşağıdaki gibi kısa bir liste yapabiliriz;
Otomatik dokümantasyon: Go ile yazmış olduğunuz kodlar, GoDoc ile size dokümante edilir. Bu şekilde söz dizimlerdeki yanlışlıklara ve best praticlere en doğru ve hızlı şekilde ulaşabilirsiniz.
Statik Kod Analizi: GoMetaLiner sayesinde kodlarını hızlıca analiz etmenizi sağlar. Bu şekilde JS gibi dillerde yaşanmış olan “Type” sorunları ile karşılaşmazsınız.
Gömülü Test Ortamı: Kodunuzu test ederken ayrıca farklı bir api veya tool kullanmanıza gerek kalmaz. Go size kendi içindeki api’yle birlikte projenizi test etmenize olanak sağlar.
Yukarıda saydıklarım sadece kısa bir listeydi bunu haricinde çok fazla güzel özellikleri var. Daha ne gibi farklı özellikleri var ve avatajları var diyen arkadaşlar Go Resmi sitesinden detaylı bilgiye ulaşabilirler.
Go dünya üzerinde büyük şirketler tarafından kullanılıyor. Büyük şirketlerin kullanımı dilin ilerleyen yıllarda kalıcı olması açısından önemli. Go’yu kullanan şirketler arasında Hootsuite, 500px, OPPO ve İntercom en bilinenler arasında.
Her ne kadar yukarıda avantajlarından bahsetmiş olsak da, sizinde bildiğiniz gibi her programlama dilinin kendine has avantajları ve dezavantajları vardır. Bu bağlamda Go’nunda kendine has dezavantajları var. Benim gözüme çarpan en sıkıntılı özelliği GUI’sin olmaması. Bu bence gerçekten sıkıntılı bir süreç, çünkü arayüz için ayrıca başka bir dili kullanmanızı gerektiriyor. Bunun için bu kısmı halletmek için Pyhton, Java veya JS gibi dillerden biri implement etmeniz gerekecek. Verdiği avantajlara baktığınız zaman bence çok büyük sorun değil ancak projenizde tek başınıza çalışacaksanız, bence optimal bir seçim olmaz.
GUI sorununun ne zaman çözülecek bilmiyor, bu konu hakkında SAP’de ABAP dilinde yaşamış olduğu sıkıntıyı yıllardır gideremiyor, sürekli olarak aspirin tedavisi ile ilerliyorlar. GUI sorunu çözülürse gerçekten inanılmaz bir dile dönüşebilir.
Görmüş olduğum bir diğer sıkıntı 3.parti modüllerin eksik olması, her ne kadar Go ile birlikte gelen özellikler yeterli olsa bile bazı uç durumlarda bu sınırların dışına çıkmanız gerekebilir. Bunun için Go için geliştirilmiş fazla kütüphane bulmak olası değil, ama 5 yıl üzeri bir yazılım tecrübeniz var ise bunu rahatlıkla kendiniz aşabilirsiniz.
Go hangi projeler için optimal?
Go dediğim gibi her proje için kesinlikle uygun değil, yapacağanız projenin uygun olmasına dikkat etmeniz gerekiyor. Bunun için size aşağıdaki gibi bir liste yapıyorum, bunlar bence Go’nun en uygun olduğu projeler;
Google kendi oluşturmuş olduğu bu dili aynı zamanda bulut hizmetinde kullanıyor. Google Cloud Platform’unda yüksek performans ve ölçeklenebilir bir proje için böyle bir seçim yaptılar. Bununla birlikte Dropbox, Terraform, Kubernets ve Docker aynı zamanda Go kullanan büyük çaplı projeler.
Medya platform sitesi veya uygulaması kullanmak istiyorsanız, büyük veri yükleri ile başa çıkmak zorunda kalacaksınız. Bu yüzden Go ‘nun bence en iyi performans göstereceği yerler burası olacaktır. Go’yu kullanan medya platformları arasında Youtube, SoundCloud ve Netflix yer alıyor.
Haber sitelerinin backendlerinde yine Go kullanılıyor ancak bence en iyi oturduğu yer değil. Ancak BBC 2012 yılında arka uç servislerinde Go’yu kullanmaya karar verdi. Uber harita servislerinde ayrıca Go kullanan şirketler arasında.
Google Go çok yeni bir dil ama hızlı bir şekilde gelişiyor. Bundan 10 yıl sonra daha fazla uygulamada Go’yu görmemiz olası. Go’nun ilerleyişi biraz da Google alakalı bir durum, şirket bu dünyadaki web, yazılım ve yazılım ürünleri gamında bu seviyede kaldığı sürece gelişmesine devam edeceğini düşünüyorum. Çünkü Google 10 yıl içinde büyümeye devam edeceğini ve teknoloji dünyasında daha fazla alana müdahale edeceğini düşünüyorum. Bu yüzden Go önemi Google birlikte sürmeye devam edecek.
GoLang’ın yazılım dünyasında tam olarak nereye oturacağı hala belirsiz. JS karmaşık ön uçlar için kullanırken, Python veri analizleri ve veri görselleştirme için ilk seçenekler olmasına rağmen, Go’yu tam olarak nasıl kullanmamız gerektiği hala muamma. Bu yüzden ilerleyen dönemlerde biraz daha bekleyerek nereye geleceğini görmek gerekiyor.
Son söz olarak her ne kadar güzel ve öğrenmesi kolay bir dil olsa da, eğer yeterli kaynağın yok ve tek başına Go ile başlamak istiyorsanız. Bence uzak durmanız gerek, yukarıda da ifade ettiğim gibi proje içinde yaşayacağınız küçük sorunlar bile başınızı ağrıtabilir.