Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

Go in Action Kitap İncelemesi

3 min read

Go in Action Book

Manning tarafından yayımlanan, William Kennedy, Brian Ketelsen ve Erik St. Martin tarafından yazılan Go in Action kitabı, Go Programlama Dili‘nde kendini geliştirmek isteyenlerin en çok faydalandığı meşhur kaynaklardan birisidir. Dikkat ederseniz öğrenmeye başlayanların değil, kendini geliştirmek isteyenlerin dedim çünkü bu kitap orta seviye yazılım geliştiricilere hitap ediyor diyebiliriz. Zaten arka kapağındaki açıklamada bunu açıkça dile getiriyorlar.

This book assumes you’re a working developer proficient with another language like Java, Ruby, Python, C#, or C++.

Ayrıca “about this book” bölümünde şöyle bir cümle ile hedef kitlelerini açıkça belirtmişler.

This book was written for an intermediate-level developer who has some experience with other programming languages and wants to learn Go.

Not: Go Programlama Dili’ne yeni başlayanlar için Go Programlama Dili’ni Nasıl Öğrenebilirim? yazımı tavsiye ederim.

Konu Anlatımı

Normalde yazılım kitapları konu anlatımına başlarken veri türleri, kontrol yapıları, fonksiyonlar… şeklinde bir sıralama izlerler. Bu kitapta ise isminden de anlaşılacağı üzerine doğrudan aksiyona giriliyor ve 39’uncu sayfaya kadar şu adresteki örnek proje satır satır açıklanıyor.

https://github.com/goinaction/code/tree/master/chapter2/sample

Diğer dikkatimi çeken bir husus ise normalde önce konu anlatımı yapılıp sonra örnek kodlarla konu pekişitirilmeye çalışılır. Go in Action’da ise yukarıda anlattığım yaklaşım tüm kitabı kapsıyor yani önce örnek kod veriliyor, ardından kodun her satırı tek tek açıklanıyor.

…Listing 5.34 shows the power of interfaces and their use in the standard library. … On line 23, we call the Get function from the http package. The http.Get function returns a pointer of type http.Request after it successfully communicates with the server. The http.Request type contains a field named Body, which is an interface value of type io.ReadCloser.

Dürüst olmam gerekirse bu kitap ile ilk kez Go öğrenmeye yeni başladığımda karşılaşmış, okumaya çalışmış ancak anlayamamıştım. Belki de bu anlatım şekli bana ters gelmişti bilemiyorum. Ancak şimdi okuduğumda ise kitap düşündüğümden çok daha hızlı bitti ve hatta satır satır açıklamalar baya sıkıcı geldi. Sanırım gerçekten de ne ileri ne de başlangıç, tam olarak orta seviye yazılımcılara hitap eden bir kitap.

Arrays, slices, and maps

Kitap bazı konuları yüzeysel geçerken bazılarında derinlemesine bir anlatıma giriyor. Dördüncü ünite olan “Arrays, slices, and maps” bölümü de derinlemesine anlattıkları bir yer. Tabi buna hak veriyorum çünkü “reference type” ve “underlying array” gibi kavramlar tam oturmadan Go öğrenmeye çalışmak ilerde bir çok hataya sebebiyet verir. Bunları anlayabilmek için de bu ünitenin derinlemesine işlenmesi gayet makul ancak yine de “maps” konusunda gereğinden fazla derine indiğini ve bu nedenle de kafa karışıklığına sebep olduğunu düşünüyorum.

Concurrency

Altıncı ünitedeki “concurrency” anlatımını gerçekten çok beğendim. Kaynaklarda genelde sadece fonksiyonların başına “go” yazıp “goroutine” oluşturmaktan bahsederler. Bu kitapta ise “process”, “thread”, “physical/logical processors” gibi kavramlara değinilmiş, örneklerle anlatım güçlendirilmiş. “Multi thread” çalışmanın mantığını bu bölümü okuyarak daha iyi anlayabilirsiniz. Ayrıca aynı bölümde “race condition” için verdiği örnekler çok güzel. “Channels” için hazırlamış olduğu insan figürlü görseller ve konu anlatımı yine gayet değerli. “Mutex” ve “atomic” konularına da değinerek çok güzel bir bölüm ortaya çıkarmışlar. Hemen bu bölümün devamındaki “concurrency patterns”‘de verilen örnek “pattern”leri de (pool, runner, search, semaphore, work) elinizin altında bulundurmakta fayda var, günlük hayatta sıkça kullanılabilirler.

https://github.com/goinaction/code/tree/master/chapter7/patterns

Archive Files

Son olarak “archive files”‘a değinmesi güzel olmuş. Yine eğitim kitaplarında kolay kolay karşılaşamayacağınız bir bilgi diyebilirim.

The source code for the standard library is precompiled as part of your Go distribution package. These precompiled files, called archive files, can be found in the $GOROOT/pkg folder for each target platform and operating system you have installed. Files with an .a extension, which are the archive files.

These files are special static Go libraries that the Go build tools create and use when compiling and linking your final programs together. This helps the build process to be fast. But there’s no way to specify these files when performing a build, so you can’t share them. The Go tooling knows when it can use an existing .a file and when it needs to rebuild one from the source code on your machine.

Son Sözler

“Bu kitabı tavsiye eder misin?” sorusuna “evet” diye cevap verebilirim ancak:
1. Go öğrenmek istiyorsanız öncelikle Learning Go ve The Go Programming Language kitaplarından sonra bunu alabilirsiniz.
2. Kitap içerik olarak yukarıda belirttiğim 2 kitaptan daha ileri seviyede değil, sadece anlatım olarak orta seviyeye hitap ediyor.
3. Fiyatlar elbette ki Türkiye şartlarına göre oldukça yüksek. Bu nedenle önceliğiniz online ortamlarda almak ve okumak olabilir.
4. Go konusunda belirli bir seviyeye geldikten sonra artık farklı kaynaklardan ve satır aralarından bir şeyler kapmaya çalışırız. O açıdan kitapta başka yerlerde paylaşılmayan bilgilere değiniliyor. İleri dönemlerde okumakta fayda var.

Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

Go’da Empty Struct Karşılaştırma Problemi

Yazılım geliştirirken bazen anlam veremediğimiz durumlarla karşılaşırız. Her programlama dilinde olduğu gibi Go’da da özenle işlenmesi ve açıklanması gereken konular vardır. Bunlardan birisi de...
Erhan Yakut
2 min read

Go Programlama Dili’ni Nasıl Öğrenebilirim?

Her gün çevremde Go Programlama Dili‘ni merak eden ama nasıl ve nereden başlayacağını bilemeyen birçok kişiyle karşılaşıyorum. Twitter mesaj kutum da bu konuların sorulduğu...
Erhan Yakut
3 min read