Go Programlama Dili - Seminer

Cihan Özhan
Cihan ÖzhanDeveloper, AI Engineer/Hacker, Data Master
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.
1 of 82

Recommended

Mobil Uygulama Güvenliği (Mobile Security) by
Mobil Uygulama Güvenliği (Mobile Security)Mobil Uygulama Güvenliği (Mobile Security)
Mobil Uygulama Güvenliği (Mobile Security)Cihan Özhan
348 views66 slides
MongoDB Overview by
MongoDB OverviewMongoDB Overview
MongoDB OverviewCihan Özhan
57 views51 slides
MLaaS - Presenting & Scaling Machine Learning Models as Microservices by
MLaaS - Presenting & Scaling Machine Learning Models as MicroservicesMLaaS - Presenting & Scaling Machine Learning Models as Microservices
MLaaS - Presenting & Scaling Machine Learning Models as MicroservicesCihan Özhan
1K views87 slides
MongoDB - JSON'a Genel Bakış by
MongoDB - JSON'a Genel BakışMongoDB - JSON'a Genel Bakış
MongoDB - JSON'a Genel BakışCihan Özhan
126 views49 slides
Python Programlama Dili by
Python Programlama DiliPython Programlama Dili
Python Programlama DiliCihan Özhan
2K views20 slides
Endüstriyel Yapay Zeka ve Otonom Sistemler by
Endüstriyel Yapay Zeka ve Otonom SistemlerEndüstriyel Yapay Zeka ve Otonom Sistemler
Endüstriyel Yapay Zeka ve Otonom SistemlerCihan Özhan
501 views101 slides

More Related Content

What's hot

Siber Güvenlikte Yapay Zeka Uygulamaları - Webinar by
Siber Güvenlikte Yapay Zeka Uygulamaları - WebinarSiber Güvenlikte Yapay Zeka Uygulamaları - Webinar
Siber Güvenlikte Yapay Zeka Uygulamaları - WebinarBGA Cyber Security
3.1K views30 slides
React.js Web Programlama by
React.js Web ProgramlamaReact.js Web Programlama
React.js Web ProgramlamaCihan Özhan
924 views50 slides
Build an LLM-powered application using LangChain.pdf by
Build an LLM-powered application using LangChain.pdfBuild an LLM-powered application using LangChain.pdf
Build an LLM-powered application using LangChain.pdfStephenAmell4
907 views22 slides
Webinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak by
Webinar: Siber Güvenlikte Olgunluk Seviyesini ArttırmakWebinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
Webinar: Siber Güvenlikte Olgunluk Seviyesini ArttırmakBGA Cyber Security
778 views23 slides
NOSQL uma breve introdução by
NOSQL uma breve introduçãoNOSQL uma breve introdução
NOSQL uma breve introduçãoWise Systems
1.3K views32 slides
Windows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri Yakalama by
Windows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri YakalamaWindows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri Yakalama
Windows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri YakalamaBGA Cyber Security
2.3K views20 slides

What's hot(20)

Siber Güvenlikte Yapay Zeka Uygulamaları - Webinar by BGA Cyber Security
Siber Güvenlikte Yapay Zeka Uygulamaları - WebinarSiber Güvenlikte Yapay Zeka Uygulamaları - Webinar
Siber Güvenlikte Yapay Zeka Uygulamaları - Webinar
BGA Cyber Security3.1K views
React.js Web Programlama by Cihan Özhan
React.js Web ProgramlamaReact.js Web Programlama
React.js Web Programlama
Cihan Özhan924 views
Build an LLM-powered application using LangChain.pdf by StephenAmell4
Build an LLM-powered application using LangChain.pdfBuild an LLM-powered application using LangChain.pdf
Build an LLM-powered application using LangChain.pdf
StephenAmell4907 views
Webinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak by BGA Cyber Security
Webinar: Siber Güvenlikte Olgunluk Seviyesini ArttırmakWebinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
Webinar: Siber Güvenlikte Olgunluk Seviyesini Arttırmak
BGA Cyber Security778 views
NOSQL uma breve introdução by Wise Systems
NOSQL uma breve introduçãoNOSQL uma breve introdução
NOSQL uma breve introdução
Wise Systems1.3K views
Windows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri Yakalama by BGA Cyber Security
Windows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri YakalamaWindows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri Yakalama
Windows Sistemlerde Yetkili Hesapları İzleyerek Yanal Hareketleri Yakalama
BGA Cyber Security2.3K views
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605) by Seongyun Byeon
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
Seongyun Byeon7.3K views
Domain Driven Design by Ryan Riley
Domain Driven DesignDomain Driven Design
Domain Driven Design
Ryan Riley9.8K views
Distributed Locking in Mule by Sunil Kumar
Distributed Locking in MuleDistributed Locking in Mule
Distributed Locking in Mule
Sunil Kumar618 views
Integration patterns in AEM 6 by Yuval Ararat
Integration patterns in AEM 6Integration patterns in AEM 6
Integration patterns in AEM 6
Yuval Ararat4.3K views
Vertex AI - Unified ML Platform for the entire AI workflow on Google Cloud by Márton Kodok
Vertex AI - Unified ML Platform for the entire AI workflow on Google CloudVertex AI - Unified ML Platform for the entire AI workflow on Google Cloud
Vertex AI - Unified ML Platform for the entire AI workflow on Google Cloud
Márton Kodok1.2K views
Natural Language Processing with Graph Databases and Neo4j by William Lyon
Natural Language Processing with Graph Databases and Neo4jNatural Language Processing with Graph Databases and Neo4j
Natural Language Processing with Graph Databases and Neo4j
William Lyon15.4K views
PostgreSQL Tuning: O elefante mais rápido que um leopardo by elliando dias
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
elliando dias7.9K views
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6 by BGA Cyber Security
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
BGA Cyber Security34.5K views
How Spark is Making an Impact at Goldman Sachs by Vincent Saulys by Spark Summit
How Spark is Making an Impact at Goldman Sachs by Vincent SaulysHow Spark is Making an Impact at Goldman Sachs by Vincent Saulys
How Spark is Making an Impact at Goldman Sachs by Vincent Saulys
Spark Summit5K views
IOS: Implementasi OAI-PMH pada Software Perpustakaan by Ismail Fahmi
IOS: Implementasi OAI-PMH pada Software PerpustakaanIOS: Implementasi OAI-PMH pada Software Perpustakaan
IOS: Implementasi OAI-PMH pada Software Perpustakaan
Ismail Fahmi2.2K views
Windows Azure Blob Storage by ylew15
Windows Azure Blob StorageWindows Azure Blob Storage
Windows Azure Blob Storage
ylew153.8K views

Similar to Go Programlama Dili - Seminer

Python Programlama Diline Giriş - Güncelleme 2018 by
Python Programlama Diline Giriş - Güncelleme 2018Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018Murat KARA
11.8K views283 slides
Python programlama by
Python programlamaPython programlama
Python programlamaMurat KARA
6K views280 slides
Golang Book - Genel Bakış by
Golang Book - Genel BakışGolang Book - Genel Bakış
Golang Book - Genel BakışCihan Özhan
193 views24 slides
Blockchain : Decentralized Application Development (Turkish) by
Blockchain : Decentralized Application Development (Turkish)Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)Cihan Özhan
267 views59 slides
Yazılım Geliştirme Teknolojileri by
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYusuf AYTİN
287 views30 slides
Android Study Jam - Kotlin ile Temel Android Eğitimi by
Android Study Jam - Kotlin ile Temel Android EğitimiAndroid Study Jam - Kotlin ile Temel Android Eğitimi
Android Study Jam - Kotlin ile Temel Android EğitimiMuhammet ÇAĞATAY
264 views37 slides

Similar to Go Programlama Dili - Seminer(20)

Python Programlama Diline Giriş - Güncelleme 2018 by Murat KARA
Python Programlama Diline Giriş - Güncelleme 2018Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018
Murat KARA11.8K views
Python programlama by Murat KARA
Python programlamaPython programlama
Python programlama
Murat KARA6K views
Golang Book - Genel Bakış by Cihan Özhan
Golang Book - Genel BakışGolang Book - Genel Bakış
Golang Book - Genel Bakış
Cihan Özhan193 views
Blockchain : Decentralized Application Development (Turkish) by Cihan Özhan
Blockchain : Decentralized Application Development (Turkish)Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)
Cihan Özhan267 views
Yazılım Geliştirme Teknolojileri by Yusuf AYTİN
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme Teknolojileri
Yusuf AYTİN287 views
Android Study Jam - Kotlin ile Temel Android Eğitimi by Muhammet ÇAĞATAY
Android Study Jam - Kotlin ile Temel Android EğitimiAndroid Study Jam - Kotlin ile Temel Android Eğitimi
Android Study Jam - Kotlin ile Temel Android Eğitimi
Muhammet ÇAĞATAY264 views
Açık Kaynak Kodlu Yazılım Geliştirme by Serkan Kaba
Açık Kaynak Kodlu Yazılım GeliştirmeAçık Kaynak Kodlu Yazılım Geliştirme
Açık Kaynak Kodlu Yazılım Geliştirme
Serkan Kaba2.3K views
Programlama Dilleri Tanıtım by Atilla Özgür
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri Tanıtım
Atilla Özgür3.4K views
LibreOffice Geliştirmeye Hızlı Başlangıç by Muhammet Kara
LibreOffice Geliştirmeye Hızlı BaşlangıçLibreOffice Geliştirmeye Hızlı Başlangıç
LibreOffice Geliştirmeye Hızlı Başlangıç
Muhammet Kara402 views
Go ile Hızlı Web Uygulamaları by Eylem Ozekin
Go ile Hızlı Web UygulamalarıGo ile Hızlı Web Uygulamaları
Go ile Hızlı Web Uygulamaları
Eylem Ozekin1.3K views
C sharp-dokumani by sersld30
C sharp-dokumaniC sharp-dokumani
C sharp-dokumani
sersld30207 views
Csharpnedir by bykezza
CsharpnedirCsharpnedir
Csharpnedir
bykezza427 views
C sharp-sitesi by sersld30
C sharp-sitesiC sharp-sitesi
C sharp-sitesi
sersld30232 views
C sharp-proje by sersld30
C sharp-projeC sharp-proje
C sharp-proje
sersld30399 views

More from Cihan Özhan

MongoDB - NoSQL Overview by
MongoDB - NoSQL OverviewMongoDB - NoSQL Overview
MongoDB - NoSQL OverviewCihan Özhan
39 views21 slides
AI and Machine Learning - Today’s Implementation Realities by
AI and Machine Learning - Today’s Implementation RealitiesAI and Machine Learning - Today’s Implementation Realities
AI and Machine Learning - Today’s Implementation RealitiesCihan Özhan
175 views212 slides
Golang Book - Go Programlama Dili Temelleri by
Golang Book - Go Programlama Dili TemelleriGolang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili TemelleriCihan Özhan
412 views33 slides
AI Security : Machine Learning, Deep Learning and Computer Vision Security by
AI Security : Machine Learning, Deep Learning and Computer Vision SecurityAI Security : Machine Learning, Deep Learning and Computer Vision Security
AI Security : Machine Learning, Deep Learning and Computer Vision SecurityCihan Özhan
318 views38 slides
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec... by
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...Cihan Özhan
536 views42 slides
İleri Seviye T-SQL Programlama - Chapter 21 by
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21Cihan Özhan
1.5K views32 slides

More from Cihan Özhan(20)

MongoDB - NoSQL Overview by Cihan Özhan
MongoDB - NoSQL OverviewMongoDB - NoSQL Overview
MongoDB - NoSQL Overview
Cihan Özhan39 views
AI and Machine Learning - Today’s Implementation Realities by Cihan Özhan
AI and Machine Learning - Today’s Implementation RealitiesAI and Machine Learning - Today’s Implementation Realities
AI and Machine Learning - Today’s Implementation Realities
Cihan Özhan175 views
Golang Book - Go Programlama Dili Temelleri by Cihan Özhan
Golang Book - Go Programlama Dili TemelleriGolang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili Temelleri
Cihan Özhan412 views
AI Security : Machine Learning, Deep Learning and Computer Vision Security by Cihan Özhan
AI Security : Machine Learning, Deep Learning and Computer Vision SecurityAI Security : Machine Learning, Deep Learning and Computer Vision Security
AI Security : Machine Learning, Deep Learning and Computer Vision Security
Cihan Özhan318 views
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec... by Cihan Özhan
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
Cihan Özhan536 views
İleri Seviye T-SQL Programlama - Chapter 21 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21
Cihan Özhan1.5K views
İleri Seviye T-SQL Programlama - Chapter 20 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 20İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20
Cihan Özhan929 views
İleri Seviye T-SQL Programlama - Chapter 19 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 19İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19
Cihan Özhan2.1K views
İleri Seviye T-SQL Programlama - Chapter 18 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 18İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18
Cihan Özhan2.9K views
İleri Seviye T-SQL Programlama - Chapter 17 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 17İleri Seviye T-SQL Programlama - Chapter 17
İleri Seviye T-SQL Programlama - Chapter 17
Cihan Özhan2.8K views
İleri Seviye T-SQL Programlama - Chapter 16 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 16İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16
Cihan Özhan1.8K views
İleri Seviye T-SQL Programlama - Chapter 15 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 15İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15
Cihan Özhan741 views
İleri Seviye T-SQL Programlama - Chapter 14 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 14İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14
Cihan Özhan1.3K views
İleri Seviye T-SQL Programlama - Chapter 13 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 13İleri Seviye T-SQL Programlama - Chapter 13
İleri Seviye T-SQL Programlama - Chapter 13
Cihan Özhan963 views
İleri Seviye T-SQL Programlama - Chapter 12 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 12İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12
Cihan Özhan765 views
İleri Seviye T-SQL Programlama - Chapter 11 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11
Cihan Özhan1.5K views
İleri Seviye T-SQL Programlama - Chapter 10 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 10İleri Seviye T-SQL Programlama - Chapter 10
İleri Seviye T-SQL Programlama - Chapter 10
Cihan Özhan1.1K views
İleri Seviye T-SQL Programlama - Chapter 09 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09
Cihan Özhan997 views
İleri Seviye T-SQL Programlama - Chapter 08 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 08İleri Seviye T-SQL Programlama - Chapter 08
İleri Seviye T-SQL Programlama - Chapter 08
Cihan Özhan666 views
İleri Seviye T-SQL Programlama - Chapter 07 by Cihan Özhan
İleri Seviye T-SQL Programlama - Chapter 07İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07
Cihan Özhan1.7K views

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

  1. https://medium.com/seek-blog/microservices-in-go-2fc1570f6800
  2. https://bmuschko.com/blog/go-testing-frameworks/
  3. https://golang.org/ref/spec#Keywords
  4. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#14
  5. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#19
  6. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#35
  7. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#39
  8. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#41
  9. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#44
  10. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#46
  11. http://golang.org/s/concurrency-is-not-parallelism
  12. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#53
  13. 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
  14. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#59
  15. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#60
  16. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#62
  17. https://tour.golang.org/concurrency/5
  18. https://go-talks.appspot.com/github.com/cihanozhan/talks-golang/go-giris/giris.slide#64