SlideShare a Scribd company logo
Go
Programlama Dili
www.cihanozhan.com
Go Programlama Dili - Seminer
Go Programlama Dili - Seminer
Go Programlama Dili - Seminer
Go Programlama Dili - Seminer
Go Programlama Dili - Seminer
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.
• Ken Thompson, 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.
Ken Thompson (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’ya Hızlı Bakış
• Go programlama dilinin official web sitesi golang.org’dur.
• Go’yu bilgisayarıma nasıl indiririm? https://golang.org/dl/
• Go dö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…
• Static Typed!
• Pointer
• Geriye dönük uyumluluk
• Eşzamanlı(Concurrency) programlama için dil seviyesinde destek.
• Go garbage collector 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 Standard Library’e sahip.
Go’da Ne Yok?
• Exception Handling
• Class
• Inheritance
• Generics
• Method Overload
Biraz İstatistik
Go’nun Güç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
Go IDEs
• Visual Studio Code : 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
Go Araçları
• go tool : 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 Github ya 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
Go Frameworks
• 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 Öğrenmesi www.cihanozhan.com/go-library-makine-ogrenmesi-
kutuphaneleri
Go Frameworks
(Microservices)
• Go-Micro
• Go-Kit
• Gizmo
• Kite
Daha fazlası : http://awesome-go.com/
Go Frameworks
(Testing)
• testing Package(Standard Library)
• Testify : Assertion and mock helper functions
• gocheck : Power assertion helper functions.
• gopwt : Power assertion helper functons.
• go-testdeep : Deep comparison helper functions.
• ginkgo ve gomega : A heavyweigth BDD testing framwork + assertion helpers.
• goblin : A Mocha-like BDD testing framework.
• GoConvey : BDD testing framework with web UI.
Go Frameworks
(AI, ML, DL, Computer Vision)
• 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/
Go Frameworks
(Game)
• Ebiten https://ebiten.org/ (2D Game Library)
• G3N https://github.com/g3n/engine (3D Game Engine)
• Engo https://engoengine.github.io/ (2D Game Engine)
• Azul3D https://azul3d.org/ (3D Game Engine)
Biraz da oyun geliştirme eğitimi : https://gameswithgo.org/
Go Programlama Dili - Seminer
Keywords
Operatör ve Sınırlayıcılar
Types
Hello Mars!
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.
Paketler Nasıl Kullanılır?
İsimlendirme
• Büyük harf ile başlayan tanımlamaları kullanabiliyorsunuz(public).
• Küçük harf ile başlayan tanımlamaları dışarıdan erişemezsiniz(private).
Değişkenler
• Statically typed
• Ö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)
Mini Uygulama
(Değişkenler)
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
Tools
go tool
(paket derleme)
• Go kodunu inşa etmek ve kurmak için go 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: go tool proof
go tool
(Import path)
• Import path’leri URL şeklinde olabilir.
• İndirmek için go aracını kullanabiliriz:
• go get 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.
godoc fmt
godoc github.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:
Türler
(Go Temelleri)
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
defer
defer deyimi, kendisini çevreleyen fonksiyon dönene kadar fonksiyonun
çalışmasını erteler.
range
• String
• Slice
• Map
• Channel
slice?
Go Programlama Dili - Seminer
Fonksiyonlar
• Birinci sınıf fonksiyonlar
• Fonksiyonlar da bir türdür
• Anonim fonksiyonlar
Fonksiyonlar
• Düz fonksiyonlar
• Çoklu sonuçlar
• Belirsiz sayıda parametre variadic arguments
• Birinci sınıf fonksiyonlar
Fonksiyonlar
struct
Birden fazla veri ve türü organize etmeye yarar.
Veriye erişmek için nokta(.) operatörünü kullanıyoruz.
Metotlar
• Metotlar da birer fonksiyondur.
• Ancak fonksiyonlardan farklı olarak alıcılara sahiptirler.
• Go’da class yapısı yoktur. Ama metotlar ile bir ana türe fonksiyonlar ile
yetenek kazandırılabilir.
Metotlar
Metotlar her türe tanımlanabilir.
Interface
• Arayüzler bir türün davranışını belirlememizi sağlar.
• Interface sıfır, bir ya da birden fazla metot ile tanımlanabilir.
• Bir tür, interface ile tanımlanan metotları tanımlıyorsa(implement) o
interface’i örtülü(implicit) gerçekleştirir.
Interface
(Örnek)
• Point ve MyInt türleri Add metodunu tanımlar:
• Interface de bir tür olduğundan bir fonksiyona atanabilir:
Interface
(Standard Library Examples)
• Bir türü sıralayabilmek için:
• fmt.Printf() çıktısını değiştirmek için(Python’daki str, repr gibi)
• Herhangi bir türe HTTP serve desteği vermek için…
Interface
(Stringer Örneği)
• Point ve MyInt türlerine Stringer desteği verelim.
Interface
(Çevreleme Örnek)
• Standart çıktıya bir şey yazdırmak.
• Belirgin(explicit) olarak da ifade edebiliriz.
• Örnek kullanımlar:
Interface
(Çevreleme Örnek)
• Color paketi(https://github.com/fatih/color) sadece Linux/Mac OS X
benzeri işletim sistemlerinde çalışıyordu(ANSI desteği olanlarda).
• Renk çıktısını kontrol eden değişken (Output adında) bir Interface türü
(io.Writer). Mevcut standart çıktısı kullanıyor.
• Windows ANSI desteklemiyor. Çözüm:
Eşzamanlılık
(Concurrency)
Eşzamanlılık Nedir?
• Birbirinden bağımsız çalışmaların bir araya gelmesi, birleşmesidir.
• Eşzamanlılık paralellik değildir.
• Sadece bir işlemciniz varsa, uygulamanız hala eşzamanlı çalışabilir, ama
paralel çalışamaz.
Bi’ tane eşzamanlı Go
• Go’nun eşzamanlı özelliklerini basit bir uygulamalı görelim.
Bi’ tane daha
• Zamanlamayı daha tahmin edilemez yapalım(hala bir saniyenin altında)
Bi’ Taneyi Çalıştırmak
• Sonsuza kadar çalışan bir eşzamanlı uygulama…
Goroutine ile Çalıştırmak
Biraz daha bekletip(Sleep) main fonksiyonu ve goroutine’in çalışmasını görelim.
Goroutine?
• Program parçacıklarının(metotlar) go kelimesiyle bağımsız olarak
çalıştırılmasını sağlar.
• Maliyeti thread’e göre çook daha ucuzdur, binlerce hatta yüz binlerce
çağrılabilir.
• goroutine bir thread değildir(İşletim sistemi seviyesinde değil).
• Bir tane thread altında binlerce goroutine çalışabilir.
• go kelimesiyle çağrıldıktan sonra Go dili tarafından yönetilir.
Goroutine İletişimi
Kanallar
Kanallar iki goroutine’nin arasında bir bağlantı sağlayarak iletişim yapmalarını sağlar.
Kanal oluşturmak:
Veri göndermek:
Veri almak(ok işareti verinin yönünü gösterir)
Kanallar
Öntanımlı olarak veri gönderirken ve alırken karşı taraf hazır olana kadar bloklanır.
Fibonacci ve Goroutine
Tamponlanmış Kanallar
(Buffered Channels)
• Tamponlanmış bir kanal aradaki senkronizasyon’u kaldırır.
• Buffer’ın belli bir kapasitesi vardır. Kapasitesi dolan buffer’ı kullanmak için
boşalması beklenir.
10 kapasiteli bir kanal:
Fibonacci
(Buffered)
Select
• select bir goroutine’in birden fazla iletişim işleminde beklemesine izin verir.
• Veri alana ya da gönderilene kadar bloklar.
• default case eklendiyse doğrudan oraya düşer(advanced pattern).
Select
Nasıl Go öğrenmeye başlayabilirim?
• Türkçe turumuz(Ondokuz Mayıs Üniversitesi'nin katkılarıyla)
– http://tur.golang.org.tr/
• Go dilinin tüm özellikleri güzel bir şekilde örneklerle anlatan bir site:
– https://gobyexample.com/
• Orta ve ileri seviye örnekler, ipucuları
– https://golang.org/doc/effective_go.html
• Cihan Özhan, Go programlama dili eğitimleri(video, makale vb.)
– http://www.cihanozhan.com/category/golang
Cemiyet-i Go
• Türkçe mail list: https://groups.google.com/forum/#!forum/golang-tr
• Ingilizce mail list: https://groups.google.com/forum/#!forum/golang-nuts
• Freenode'de #go-nuts
• Twitter'de #golang hash tagi kullanılıyor (#go değil!)
Go Programlama Dili - Seminer
Go Programlama Dili - Seminer
Kaynaklar
• http://tur.golang.org.tr/
• https://gobyexample.com/
• http://talks.golang.org/2012/splash.article
• http://go-talks.appspot.com/github.com/golang/talks/2012/simple.slide
• https://github.com/golangmedellin/gotalks
• https://talks.golang.org/2012/concurrency.slide
• https://talks.golang.org/2014/taste.slide
• http://go-talks.appspot.com/github.com/fatih/talks/go-giris/giris.slide
• https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide
• http://www.cihanozhan.com/category/golang/
Sunumu hazırlarken yukarıdaki kaynaklardan faydalandım.

More Related Content

PPTX
MongoDB - NoSQL Overview
PPTX
MLaaS - Presenting & Scaling Machine Learning Models as Microservices
PPTX
MongoDB Overview
PPTX
Mobil Uygulama Güvenliği (Mobile Security)
PDF
APIsecure 2023 - Approaching Multicloud API Security USing Metacloud, David L...
PPTX
Python Programlama Dili
PPTX
Azure DevOps CI/CD For Beginners
PPTX
Docker introduction (1)
MongoDB - NoSQL Overview
MLaaS - Presenting & Scaling Machine Learning Models as Microservices
MongoDB Overview
Mobil Uygulama Güvenliği (Mobile Security)
APIsecure 2023 - Approaching Multicloud API Security USing Metacloud, David L...
Python Programlama Dili
Azure DevOps CI/CD For Beginners
Docker introduction (1)

What's hot (20)

PDF
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
PDF
Docker para iniciantes
PDF
Introduction to DevOps
PDF
Openshift argo cd_v1_2
PPTX
Modern CI/CD Pipeline Using Azure DevOps
PDF
Introduction to DevOps
PPTX
Managing code quality with SonarQube
PPTX
What Is DevOps?
PPTX
An introduction to DevOps
PDF
Introduction to DevOps
PPTX
Maven Basics - Explained
PPTX
Serverless computing
PDF
GitOps with ArgoCD
PPTX
Infrastructure as Code (IaC)
PDF
CI/CD (DevOps) 101
PPTX
SonarQube - Como avaliar seus fornecedores e garantir a qualidade de suas ent...
PPTX
Dev ops != Dev+Ops
PDF
DevOps Powerpoint Presentation Slides
PDF
DevOps Lifecycle | Edureka
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
Docker para iniciantes
Introduction to DevOps
Openshift argo cd_v1_2
Modern CI/CD Pipeline Using Azure DevOps
Introduction to DevOps
Managing code quality with SonarQube
What Is DevOps?
An introduction to DevOps
Introduction to DevOps
Maven Basics - Explained
Serverless computing
GitOps with ArgoCD
Infrastructure as Code (IaC)
CI/CD (DevOps) 101
SonarQube - Como avaliar seus fornecedores e garantir a qualidade de suas ent...
Dev ops != Dev+Ops
DevOps Powerpoint Presentation Slides
DevOps Lifecycle | Edureka
Ad

Similar to Go Programlama Dili - Seminer (9)

PDF
Golang Book - Genel Bakış
PDF
Golang Book - Giriş
PDF
Go ile Hızlı Web Uygulamaları
PDF
Python Programlama Diline Giriş Güncelleme 2024
PDF
Python Programlama Diline Giriş - Güncelleme 2018
PDF
Python programlama
PDF
Golang Book - Go Programlama Dili Temelleri
PDF
INFTEC-2024 Python Programlama Giriş Kursu
PDF
Node.js
Golang Book - Genel Bakış
Golang Book - Giriş
Go ile Hızlı Web Uygulamaları
Python Programlama Diline Giriş Güncelleme 2024
Python Programlama Diline Giriş - Güncelleme 2018
Python programlama
Golang Book - Go Programlama Dili Temelleri
INFTEC-2024 Python Programlama Giriş Kursu
Node.js
Ad

More from Cihan Özhan (20)

PPTX
MongoDB - JSON'a Genel Bakış
PPTX
AI and Machine Learning - Today’s Implementation Realities
PPTX
Blockchain : Decentralized Application Development (Turkish)
PDF
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
PDF
Endüstriyel Yapay Zeka ve Otonom Sistemler
PDF
AI Security : Machine Learning, Deep Learning and Computer Vision Security
PPTX
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
PDF
İleri Seviye T-SQL Programlama - Chapter 21
PDF
İleri Seviye T-SQL Programlama - Chapter 20
PDF
İleri Seviye T-SQL Programlama - Chapter 19
PDF
İleri Seviye T-SQL Programlama - Chapter 18
PDF
İleri Seviye T-SQL Programlama - Chapter 17
PDF
İleri Seviye T-SQL Programlama - Chapter 16
PDF
İleri Seviye T-SQL Programlama - Chapter 15
PDF
İleri Seviye T-SQL Programlama - Chapter 14
PDF
İleri Seviye T-SQL Programlama - Chapter 13
PDF
İleri Seviye T-SQL Programlama - Chapter 12
PDF
İleri Seviye T-SQL Programlama - Chapter 11
PDF
İleri Seviye T-SQL Programlama - Chapter 10
PDF
İleri Seviye T-SQL Programlama - Chapter 09
MongoDB - JSON'a Genel Bakış
AI and Machine Learning - Today’s Implementation Realities
Blockchain : Decentralized Application Development (Turkish)
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
Endüstriyel Yapay Zeka ve Otonom Sistemler
AI Security : Machine Learning, Deep Learning and Computer Vision Security
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 17
İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 13
İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 10
İleri Seviye T-SQL Programlama - Chapter 09

Go Programlama Dili - Seminer

  • 7. 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. • Ken Thompson, 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. Ken Thompson (B, C, Unix, UTF-8) Rob Pike (Unix, UTF-8) Robert Griesemer (Hotspot, JVM)
  • 8. 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…
  • 9. Go’ya Hızlı Bakış • Go programlama dilinin official web sitesi golang.org’dur. • Go’yu bilgisayarıma nasıl indiririm? https://golang.org/dl/ • Go dö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/
  • 10. 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… • Static Typed! • Pointer • Geriye dönük uyumluluk • Eşzamanlı(Concurrency) programlama için dil seviyesinde destek. • Go garbage collector 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 Standard Library’e sahip.
  • 11. Go’da Ne Yok? • Exception Handling • Class • Inheritance • Generics • Method Overload
  • 13. Go’nun Güç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
  • 14. 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
  • 15. Go IDEs • Visual Studio Code : 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
  • 16. Go Araçları • go tool : 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 Github ya 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.
  • 17. 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
  • 18. Go Frameworks • 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 Öğrenmesi www.cihanozhan.com/go-library-makine-ogrenmesi- kutuphaneleri
  • 19. Go Frameworks (Microservices) • Go-Micro • Go-Kit • Gizmo • Kite Daha fazlası : http://awesome-go.com/
  • 20. Go Frameworks (Testing) • testing Package(Standard Library) • Testify : Assertion and mock helper functions • gocheck : Power assertion helper functions. • gopwt : Power assertion helper functons. • go-testdeep : Deep comparison helper functions. • ginkgo ve gomega : A heavyweigth BDD testing framwork + assertion helpers. • goblin : A Mocha-like BDD testing framework. • GoConvey : BDD testing framework with web UI.
  • 21. Go Frameworks (AI, ML, DL, Computer Vision) • 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/
  • 22. Go Frameworks (Game) • Ebiten https://ebiten.org/ (2D Game Library) • G3N https://github.com/g3n/engine (3D Game Engine) • Engo https://engoengine.github.io/ (2D Game Engine) • Azul3D https://azul3d.org/ (3D Game Engine) Biraz da oyun geliştirme eğitimi : https://gameswithgo.org/
  • 26. Types
  • 28. 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.
  • 30. İsimlendirme • Büyük harf ile başlayan tanımlamaları kullanabiliyorsunuz(public). • Küçük harf ile başlayan tanımlamaları dışarıdan erişemezsiniz(private).
  • 31. Değişkenler • Statically typed • Ö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)
  • 33. 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
  • 34. Tools
  • 35. go tool (paket derleme) • Go kodunu inşa etmek ve kurmak için go 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: go tool proof
  • 36. go tool (Import path) • Import path’leri URL şeklinde olabilir. • İndirmek için go aracını kullanabiliriz: • go get 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.
  • 37. 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.
  • 38. 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. godoc fmt godoc github.com/koding/logging
  • 39. 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.
  • 40. Testing Go aracı ve testin paketi hafif bir test framework’ü sunar.
  • 41. Testing (Çalıştırmak) Go aracı ile testleri çalıştırabiliriz. Mevcut tüm projeler için çalıştırmak için:
  • 42. Türler (Go Temelleri) • Basit türler • Birleşik(composite) türler: • Soyut tür:
  • 44. Akış kontrolleri Basit akışlar • if, else • for, break, continue • switch, case, default, fallthrough • return • goto Gelişmiş akışlar • range • select • go • defer
  • 45. defer
  • 46. defer
  • 47. defer defer deyimi, kendisini çevreleyen fonksiyon dönene kadar fonksiyonun çalışmasını erteler.
  • 51. Fonksiyonlar • Birinci sınıf fonksiyonlar • Fonksiyonlar da bir türdür • Anonim fonksiyonlar
  • 52. Fonksiyonlar • Düz fonksiyonlar • Çoklu sonuçlar • Belirsiz sayıda parametre variadic arguments • Birinci sınıf fonksiyonlar
  • 54. struct Birden fazla veri ve türü organize etmeye yarar. Veriye erişmek için nokta(.) operatörünü kullanıyoruz.
  • 55. Metotlar • Metotlar da birer fonksiyondur. • Ancak fonksiyonlardan farklı olarak alıcılara sahiptirler. • Go’da class yapısı yoktur. Ama metotlar ile bir ana türe fonksiyonlar ile yetenek kazandırılabilir.
  • 56. Metotlar Metotlar her türe tanımlanabilir.
  • 57. Interface • Arayüzler bir türün davranışını belirlememizi sağlar. • Interface sıfır, bir ya da birden fazla metot ile tanımlanabilir. • Bir tür, interface ile tanımlanan metotları tanımlıyorsa(implement) o interface’i örtülü(implicit) gerçekleştirir.
  • 58. Interface (Örnek) • Point ve MyInt türleri Add metodunu tanımlar: • Interface de bir tür olduğundan bir fonksiyona atanabilir:
  • 59. Interface (Standard Library Examples) • Bir türü sıralayabilmek için: • fmt.Printf() çıktısını değiştirmek için(Python’daki str, repr gibi) • Herhangi bir türe HTTP serve desteği vermek için…
  • 60. Interface (Stringer Örneği) • Point ve MyInt türlerine Stringer desteği verelim.
  • 61. Interface (Çevreleme Örnek) • Standart çıktıya bir şey yazdırmak. • Belirgin(explicit) olarak da ifade edebiliriz. • Örnek kullanımlar:
  • 62. Interface (Çevreleme Örnek) • Color paketi(https://github.com/fatih/color) sadece Linux/Mac OS X benzeri işletim sistemlerinde çalışıyordu(ANSI desteği olanlarda). • Renk çıktısını kontrol eden değişken (Output adında) bir Interface türü (io.Writer). Mevcut standart çıktısı kullanıyor. • Windows ANSI desteklemiyor. Çözüm:
  • 64. Eşzamanlılık Nedir? • Birbirinden bağımsız çalışmaların bir araya gelmesi, birleşmesidir. • Eşzamanlılık paralellik değildir. • Sadece bir işlemciniz varsa, uygulamanız hala eşzamanlı çalışabilir, ama paralel çalışamaz.
  • 65. Bi’ tane eşzamanlı Go • Go’nun eşzamanlı özelliklerini basit bir uygulamalı görelim.
  • 66. Bi’ tane daha • Zamanlamayı daha tahmin edilemez yapalım(hala bir saniyenin altında)
  • 67. Bi’ Taneyi Çalıştırmak • Sonsuza kadar çalışan bir eşzamanlı uygulama…
  • 68. Goroutine ile Çalıştırmak Biraz daha bekletip(Sleep) main fonksiyonu ve goroutine’in çalışmasını görelim.
  • 69. Goroutine? • Program parçacıklarının(metotlar) go kelimesiyle bağımsız olarak çalıştırılmasını sağlar. • Maliyeti thread’e göre çook daha ucuzdur, binlerce hatta yüz binlerce çağrılabilir. • goroutine bir thread değildir(İşletim sistemi seviyesinde değil). • Bir tane thread altında binlerce goroutine çalışabilir. • go kelimesiyle çağrıldıktan sonra Go dili tarafından yönetilir.
  • 71. Kanallar Kanallar iki goroutine’nin arasında bir bağlantı sağlayarak iletişim yapmalarını sağlar. Kanal oluşturmak: Veri göndermek: Veri almak(ok işareti verinin yönünü gösterir)
  • 72. Kanallar Öntanımlı olarak veri gönderirken ve alırken karşı taraf hazır olana kadar bloklanır.
  • 74. Tamponlanmış Kanallar (Buffered Channels) • Tamponlanmış bir kanal aradaki senkronizasyon’u kaldırır. • Buffer’ın belli bir kapasitesi vardır. Kapasitesi dolan buffer’ı kullanmak için boşalması beklenir. 10 kapasiteli bir kanal:
  • 76. Select • select bir goroutine’in birden fazla iletişim işleminde beklemesine izin verir. • Veri alana ya da gönderilene kadar bloklar. • default case eklendiyse doğrudan oraya düşer(advanced pattern).
  • 78. Nasıl Go öğrenmeye başlayabilirim? • Türkçe turumuz(Ondokuz Mayıs Üniversitesi'nin katkılarıyla) – http://tur.golang.org.tr/ • Go dilinin tüm özellikleri güzel bir şekilde örneklerle anlatan bir site: – https://gobyexample.com/ • Orta ve ileri seviye örnekler, ipucuları – https://golang.org/doc/effective_go.html • Cihan Özhan, Go programlama dili eğitimleri(video, makale vb.) – http://www.cihanozhan.com/category/golang
  • 79. Cemiyet-i Go • Türkçe mail list: https://groups.google.com/forum/#!forum/golang-tr • Ingilizce mail list: https://groups.google.com/forum/#!forum/golang-nuts • Freenode'de #go-nuts • Twitter'de #golang hash tagi kullanılıyor (#go değil!)
  • 82. Kaynaklar • http://tur.golang.org.tr/ • https://gobyexample.com/ • http://talks.golang.org/2012/splash.article • http://go-talks.appspot.com/github.com/golang/talks/2012/simple.slide • https://github.com/golangmedellin/gotalks • https://talks.golang.org/2012/concurrency.slide • https://talks.golang.org/2014/taste.slide • http://go-talks.appspot.com/github.com/fatih/talks/go-giris/giris.slide • https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide • http://www.cihanozhan.com/category/golang/ Sunumu hazırlarken yukarıdaki kaynaklardan faydalandım.

Editor's Notes

  • #20: https://medium.com/seek-blog/microservices-in-go-2fc1570f6800
  • #21: https://bmuschko.com/blog/go-testing-frameworks/
  • #25: https://golang.org/ref/spec#Keywords
  • #28: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#14
  • #33: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#19
  • #48: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#35
  • #54: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#39
  • #56: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#41
  • #59: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#44
  • #61: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#46
  • #65: http://golang.org/s/concurrency-is-not-parallelism
  • #68: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#53
  • #69: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#54 https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#55
  • #73: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#59
  • #74: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#60
  • #76: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#62
  • #77: https://tour.golang.org/concurrency/5
  • #78: https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#64