980 likes | 1.16k Views
Bu seminerde Go programlama diline hizli bir bakis attik. 2017'de verdigim Go seminerinin baglantisina da bu sunumun kaynaklar kismindan ulasabilirsiniz.<br><br>www.cihanozhan.com<br>www.deeplab.co<br>www.darkfactory.co
E N D
GoProgramlama Dili www.cihanozhan.com
Go Nedir? • Açık kaynak kodlu, sade ve güçlü bir programlama dilidir. • Google tarafından, kendi altyapı sorunlarını çözmek için geliştirildi. • KenThompson, Rob Pike ve Robert Griesiemer tarafından 2007 yılında geliştirilmeye başlandı. • 10 Kasım 2009 yılında tanıtıldı ve 28 Mart 2012’de Go 1.0 yayınlandı. • Mevcut Go versiyonu Go 1.13. KenThompson(B, C, Unix, UTF-8) Rob Pike (Unix, UTF-8) Robert Griesemer (Hotspot, JVM)
Google’ın Sorunu Ne? • Dev donanım ve yazılım altyapısı var. • Milyarlarca satır kod var. • Sunucular çoğunlukla C++, Java ve Pythonüzerinde koşuyor. • Binlerce mühendis aynı altyapıyı üzerinde çalışıyor. • Yüksek yüksek anlık trafik alıyor. • Ve tabi ki milyonlarca sunucu bilgisayar… • Google’ın 2006 raporuna göre 2.5 milyon sunucu…
Go’yaHızlı Bakış • Go programlama dilinin official web sitesi golang.org’dur. • Go’yu bilgisayarıma nasıl indiririm? https://golang.org/dl/ • Godökümantasyonuna erişim: https://golang.org/doc/ • Go paketlerine online erişim: https://golang.org/pkg/ • Online Go geliştirme ortamı: https://play.golang.org/
Neden Go? • Sade, kolay ve hızlı öğrenilebilir. • Sadece 25 anahtar kelimeye sahiptir. • Cross-platform bir dildir: Linux, Windows, MacOSX, Plan9 • Söz dizimi tartışmaları sevmez! Kendi kuralarıyla bu sorunu çözer… • StaticTyped! • Pointer • Geriye dönük uyumluluk • Eşzamanlı(Concurrency) programlama için dil seviyesinde destek. • Gogarbagecollector mimarisine sahiptir. Hafızayı kendisi yönetir. • Sorun/Çözüm: Derleme işlemlerinin uzun sürmesi! • Sorun/Çözüm: Dillerde genellikle sadece belirli yeteneklerin kullanılması. Go’da bir işin genellikle tek bir yolu vardır. • Sorun/Çözüm: Kodu farklı sunuculara dağıtmak! Go tek bir dosyaya derlenir. Bu sayede tek bir binary dosyayı dağıtarak kolayca çalıştırılabilir. • Güçlü bir StandardLibrary’e sahip.
Go’daNe Yok? • ExceptionHandling • Class • Inheritance • Generics • MethodOverload
Go’nunGüçlü Olduğu Alanlar • Sistem • Veri Odaklı & Veri işleme • In-Memory, Veritabanı, XML, JSON, ZIP/RAR, Doküman vb… • Microservices, RESTful, API • Back-End • Real-time • Web • Oyun • IoT • Security
Go Programlama Dili Kullanıcıları • Google • Apple • Alibaba • Docker • Kubernetes • Twitter • Amazon • GitHub • Dropbox • Facebook • Tesla & SpaceX • Koding • YouTube • Ve diğer: https://github.com/golang/go/wiki/GoUsers
GoIDEs • Visual StudioCode: https://github.com/Microsoft/vscode-go • Vim: https://github.com/Fatih/vim-go • Emacs : https://github.com/dominikh/go-mode.el • SublimeText : https://github.com/DisposaBoy/GoSublime • IntelliJ : https://github.com/go-lang-plugin-org/go-lang-idea-plugin • Eclipse : https://github.com/GoClipse/goclipse • LiteIDE : https://github.com/visualfc/liteide • Atom: https://atom.io/packages/go-plus
GoAraçları • gotool : Go dilinin en temel aracıdır. Go uygulamanızın derleme esnasındaki işlemleri konsol üzerinden parametrik olarak yönetmenizi sağlar. • godoc: Kod içerisinde, örneğin bir metod üzerinde yazdığınız açıklama satırına göre bir belgelendirme-dökümantasyon üretmeyi sağlar. godoc.org sitesi üzerinden de Githubya da dilin gömülü özelliklerinin dökümanlarına online olarak ulaşmak mümkündür. Örn; http://godoc.org/fmt#Println • gofmt: Go dili söz dizimi kurallarını(bazıları katıdır) yöneten bir orkestra şefidir. Go kodu söz dizimi standartlarını uygular.
Standard Library • compress • compress/gzip • crypto • database • database/sql • encoding • encoding/csv, encoding/json, encoding/xml, encoding/binary • errors • html • html/template • net • net/http • os • reflect • runtime • runtime/cgo • runtime/pprof
GoFrameworks • Beego (Web) • Gin (Web) • Gorilla Toolkit (Web) • Revel (Web) • Goji (Web) • Buffalo (Web) • GORM (ORM) • XORM (ORM) • Gobot (Robotik ve IoT) • EMBD.KIDOMAN (Robotik ve IoT) • Makine Öğrenmesiwww.cihanozhan.com/go-library-makine-ogrenmesi-kutuphaneleri
GoFrameworks(Microservices) • Go-Micro • Go-Kit • Gizmo • Kite Daha fazlası : http://awesome-go.com/
GoFrameworks(Testing) • testingPackage(Standard Library) • Testify : Assertionandmockhelperfunctions • gocheck : Powerassertionhelperfunctions. • gopwt : Powerassertionhelperfunctons. • go-testdeep : Deepcomparisonhelperfunctions. • ginkgo ve gomega : A heavyweigth BDD testingframwork + assertionhelpers. • goblin : A Mocha-like BDD testingframework. • GoConvey : BDD testingframeworkwith web UI.
GoFrameworks(AI, ML, DL, ComputerVision) • Gorgonia (https://github.com/gorgonia/gorgonia) • GoCV (OpenCV için bir wrapper) (https://gocv.io/) Daha birçok : http://www.cihanozhan.com/golang-machine-learning-libraries/
GoFrameworks(Game) • Ebitenhttps://ebiten.org/ (2D Game Library) • G3N https://github.com/g3n/engine (3D Game Engine) • Engohttps://engoengine.github.io/ (2D Game Engine) • Azul3D https://azul3d.org/(3D Game Engine) Biraz da oyun geliştirme eğitimi : https://gameswithgo.org/
Paketler Her Go uygulaması paketlerden oluşur. Paketler ne içerir? • Fonksiyon • Türler(types) • Değişkenler • Sabitler(constants) Bir paket bir dosya ve 10 satırdan oluşabileceği gibi, onlarca dosya ve binlerce satır koddan da oluşabilir. Başka paketleri kod dosyasına dahil etmek için import kullanılır.
İsimlendirme • Büyükharf ile başlayan tanımlamaları kullanabiliyorsunuz(public). • Küçükharf ile başlayan tanımlamaları dışarıdan erişemezsiniz(private).
Değişkenler • Staticallytyped • Örtülü(implicit) ya da belirgin(explicit)ilklendirme(initialization) • Kısaltılmış değişken bildirimleri(sadece fonksiyonların içinde geçerli) • Adresini almak için(C’deki gibi)
Hata Yönetimi(Errors) • Çoklu sonuç dönüyor, peki neden sonuçlardan biri hata türünde olmasın? • Exception yok. • Hataları her zaman yönetmeniz gerekiyor, kaçış yok! C’de Go’da
gotool(paket derleme) • Go kodunu inşa etmek ve kurmak içingo aracı kullanmak gerekiyor. • Bir tane dosya(main paketli) çalıştırmak için. Derleyip çalıştırır: • Mevcut dizindeki paketi derlemek için: • Go aracı diğer tüm Go araçları için aynı zamanda bir proxy görevi yapıyor. Yani onun sayesinde diğer gerekli araçları çağırabilirsiniz • Örn: gotoolproof
gotool(Importpath) • Importpath’leri URL şeklinde olabilir. • İndirmek için go aracını kullanabiliriz: • goget sırayla şunları sizin için yapar: • Git reposundan GOPATH/src/github/cihanozhan/libraryName olarak indirir. • Tüm paketi derler ve kurar. • Eğer –u parametresini verirseniz paketi günceller.
godoc • godoc kodun içinde yer alan belgelendirmeyi çekip çeşitli şekillerde sunar. • Yorum(comment) olarak ilgili tanımlamanın üst kısmına eklenirken: Kodun içinde yer alan belgelendirmenin bakımı daha kolay yapılmaktadır.
godoc Online olarak godoc.org’dan bakılabilir. http://godoc.org/fmt#Println http://godoc.org/github.com/cihanozhan/libraryName Çevrimdışı bir sunucu çalıştırılabilir. godoc–http:6060 Terminal üzerinden kullanılabilir. godocfmt godocgithub.com/koding/logging
gofmt • Go kodunu güzelleştirmek için kullanılır. • Tüm Go kaynak kodu fmt ile güzelleştirildi. gofmt’siz kod eklenmez. • Go kodunun syntax standardını belirler ve korur. • Kod okuma ve yazmayı kolaylaştırır.
Testing Go aracı ve testin paketi hafif bir test framework’ü sunar.
Testing(Çalıştırmak) Go aracı ile testleri çalıştırabiliriz. Mevcut tüm projeler için çalıştırmak için:
Türler(Go Temelleri) • Basit türler • Birleşik(composite)türler: • Soyut tür:
Akış kontrolleri Basit akışlar • if, else • for, break, continue • switch, case, default, fallthrough • return • goto Gelişmiş akışlar • range • select • go • defer
defer defer deyimi, kendisini çevreleyen fonksiyon dönene kadar fonksiyonun çalışmasını erteler.
range • String • Slice • Map • Channel