SlideShare uma empresa Scribd logo
1 de 82
Go
Programlama 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.
• 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/
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?
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!)
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.

Mais conteúdo relacionado

Mais procurados

Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsEugene Fidelin
 
Understanding container security
Understanding container securityUnderstanding container security
Understanding container securityJohn Kinsella
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean ArchitectureMattia Battiston
 
Container Security
Container SecurityContainer Security
Container SecuritySalman Baset
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Herofazalraja
 
Grafonnet, grafana dashboards as code
Grafonnet, grafana dashboards as codeGrafonnet, grafana dashboards as code
Grafonnet, grafana dashboards as codeJulien Pivotto
 
Docker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersDocker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersYajushi Srivastava
 
Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)
Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)
Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)Adin Ermie
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Simplilearn
 
REX: Cloud Native Apps on a K8S stack
REX: Cloud Native Apps on a K8S stackREX: Cloud Native Apps on a K8S stack
REX: Cloud Native Apps on a K8S stackMathieu Herbert
 

Mais procurados (20)

DevOps on AWS
DevOps on AWSDevOps on AWS
DevOps on AWS
 
Swagger
SwaggerSwagger
Swagger
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontends
 
Flutter
FlutterFlutter
Flutter
 
Understanding container security
Understanding container securityUnderstanding container security
Understanding container security
 
DevOps on AWS
DevOps on AWSDevOps on AWS
DevOps on AWS
 
Gitlab CI/CD
Gitlab CI/CDGitlab CI/CD
Gitlab CI/CD
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
presentation on Docker
presentation on Dockerpresentation on Docker
presentation on Docker
 
Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
DevOps beyond the Tools
DevOps beyond the ToolsDevOps beyond the Tools
DevOps beyond the Tools
 
Container Security
Container SecurityContainer Security
Container Security
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Grafonnet, grafana dashboards as code
Grafonnet, grafana dashboards as codeGrafonnet, grafana dashboards as code
Grafonnet, grafana dashboards as code
 
Docker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersDocker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and Containers
 
Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)
Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)
Infrastructure-as-Code (IaC) Using Terraform (Intermediate Edition)
 
Flutter
FlutterFlutter
Flutter
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
 
REX: Cloud Native Apps on a K8S stack
REX: Cloud Native Apps on a K8S stackREX: Cloud Native Apps on a K8S stack
REX: Cloud Native Apps on a K8S stack
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
 

Semelhante a Go Programlama Dili - Seminer

Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018Murat KARA
 
Python programlama
Python programlamaPython programlama
Python programlamaMurat KARA
 
Golang Book - Genel Bakış
Golang Book - Genel BakışGolang Book - Genel Bakış
Golang Book - Genel BakışCihan Özhan
 
Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)Cihan Özhan
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYusuf AYTİN
 
Android Study Jam - Kotlin ile Temel Android Eğitimi
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
 
Devfest Istanbul 2015 Sunumu
Devfest Istanbul 2015 SunumuDevfest Istanbul 2015 Sunumu
Devfest Istanbul 2015 SunumuAybüke Özdemir
 
Açık Kaynak Kodlu Yazılım Geliştirme
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ştirmeSerkan Kaba
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri TanıtımAtilla Özgür
 
LibreOffice Geliştirmeye Hızlı Başlangıç
LibreOffice Geliştirmeye Hızlı BaşlangıçLibreOffice Geliştirmeye Hızlı Başlangıç
LibreOffice Geliştirmeye Hızlı BaşlangıçMuhammet Kara
 
Go ile Hızlı Web Uygulamaları
Go ile Hızlı Web UygulamalarıGo ile Hızlı Web Uygulamaları
Go ile Hızlı Web UygulamalarıEylem Ozekin
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumanisersld30
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedirbykezza
 
C sharp-sitesi
C sharp-sitesiC sharp-sitesi
C sharp-sitesisersld30
 
C sharp-proje
C sharp-projeC sharp-proje
C sharp-projesersld30
 

Semelhante a Go Programlama Dili - Seminer (20)

Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018Python Programlama Diline Giriş - Güncelleme 2018
Python Programlama Diline Giriş - Güncelleme 2018
 
Python programlama
Python programlamaPython programlama
Python programlama
 
Golang Book - Genel Bakış
Golang Book - Genel BakışGolang Book - Genel Bakış
Golang Book - Genel Bakış
 
Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)
 
Yazılım Geliştirme Teknolojileri
Yazılım Geliştirme TeknolojileriYazılım Geliştirme Teknolojileri
Yazılım Geliştirme Teknolojileri
 
Android Study Jam - Kotlin ile Temel Android Eğitimi
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
 
Nedir Bu Java ?
Nedir Bu Java ?Nedir Bu Java ?
Nedir Bu Java ?
 
Devfest Istanbul 2015 Sunumu
Devfest Istanbul 2015 SunumuDevfest Istanbul 2015 Sunumu
Devfest Istanbul 2015 Sunumu
 
Zed attack-proxy-web
Zed attack-proxy-webZed attack-proxy-web
Zed attack-proxy-web
 
Açık Kaynak Kodlu Yazılım Geliştirme
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
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri Tanıtım
 
LibreOffice Geliştirmeye Hızlı Başlangıç
LibreOffice Geliştirmeye Hızlı BaşlangıçLibreOffice Geliştirmeye Hızlı Başlangıç
LibreOffice Geliştirmeye Hızlı Başlangıç
 
Çevik testler
Çevik testlerÇevik testler
Çevik testler
 
Go ile Hızlı Web Uygulamaları
Go ile Hızlı Web UygulamalarıGo ile Hızlı Web Uygulamaları
Go ile Hızlı Web Uygulamaları
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumani
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedir
 
C sharp-sitesi
C sharp-sitesiC sharp-sitesi
C sharp-sitesi
 
MongoDB ve C# Driver'ı
MongoDB ve C# Driver'ıMongoDB ve C# Driver'ı
MongoDB ve C# Driver'ı
 
HTML5 ve Phonegap
HTML5  ve PhonegapHTML5  ve Phonegap
HTML5 ve Phonegap
 
C sharp-proje
C sharp-projeC sharp-proje
C sharp-proje
 

Mais de Cihan Özhan

MongoDB - NoSQL Overview
MongoDB - NoSQL OverviewMongoDB - NoSQL Overview
MongoDB - NoSQL OverviewCihan Özhan
 
MongoDB - JSON'a Genel Bakış
MongoDB - JSON'a Genel BakışMongoDB - JSON'a Genel Bakış
MongoDB - JSON'a Genel BakışCihan Özhan
 
AI and Machine Learning - Today’s Implementation Realities
AI and Machine Learning - Today’s Implementation RealitiesAI and Machine Learning - Today’s Implementation Realities
AI and Machine Learning - Today’s Implementation RealitiesCihan Özhan
 
Mobil Uygulama Güvenliği (Mobile Security)
Mobil Uygulama Güvenliği (Mobile Security)Mobil Uygulama Güvenliği (Mobile Security)
Mobil Uygulama Güvenliği (Mobile Security)Cihan Özhan
 
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve YapılarGo Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve YapılarCihan Özhan
 
Golang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili TemelleriGolang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili TemelleriCihan Özhan
 
Golang Book - Giriş
Golang Book - GirişGolang Book - Giriş
Golang Book - GirişCihan Özhan
 
MLaaS - Presenting & Scaling Machine Learning Models as Microservices
MLaaS - Presenting & Scaling Machine Learning Models as MicroservicesMLaaS - Presenting & Scaling Machine Learning Models as Microservices
MLaaS - Presenting & Scaling Machine Learning Models as MicroservicesCihan Ö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...
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...Cihan Özhan
 
Endüstriyel Yapay Zeka ve Otonom Sistemler
Endüstriyel Yapay Zeka ve Otonom SistemlerEndüstriyel Yapay Zeka ve Otonom Sistemler
Endüstriyel Yapay Zeka ve Otonom SistemlerCihan Özhan
 
AI Security : Machine Learning, Deep Learning and Computer Vision Security
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
 
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...
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...Cihan Özhan
 
Python Programlama Dili
Python Programlama DiliPython Programlama Dili
Python Programlama DiliCihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 17
İleri Seviye T-SQL Programlama - Chapter 17İleri Seviye T-SQL Programlama - Chapter 17
İleri Seviye T-SQL Programlama - Chapter 17Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16Cihan Özhan
 

Mais de Cihan Özhan (20)

MongoDB Overview
MongoDB OverviewMongoDB Overview
MongoDB Overview
 
MongoDB - NoSQL Overview
MongoDB - NoSQL OverviewMongoDB - NoSQL Overview
MongoDB - NoSQL Overview
 
MongoDB - JSON'a Genel Bakış
MongoDB - JSON'a Genel BakışMongoDB - JSON'a Genel Bakış
MongoDB - JSON'a Genel Bakış
 
AI and Machine Learning - Today’s Implementation Realities
AI and Machine Learning - Today’s Implementation RealitiesAI and Machine Learning - Today’s Implementation Realities
AI and Machine Learning - Today’s Implementation Realities
 
Mobil Uygulama Güvenliği (Mobile Security)
Mobil Uygulama Güvenliği (Mobile Security)Mobil Uygulama Güvenliği (Mobile Security)
Mobil Uygulama Güvenliği (Mobile Security)
 
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve YapılarGo Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
 
Golang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili TemelleriGolang Book - Go Programlama Dili Temelleri
Golang Book - Go Programlama Dili Temelleri
 
Golang Book - Giriş
Golang Book - GirişGolang Book - Giriş
Golang Book - Giriş
 
MLaaS - Presenting & Scaling Machine Learning Models as Microservices
MLaaS - Presenting & Scaling Machine Learning Models as MicroservicesMLaaS - Presenting & Scaling Machine Learning Models as Microservices
MLaaS - Presenting & Scaling Machine Learning Models as Microservices
 
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...
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
 
Endüstriyel Yapay Zeka ve Otonom Sistemler
Endüstriyel Yapay Zeka ve Otonom SistemlerEndüstriyel Yapay Zeka ve Otonom Sistemler
Endüstriyel Yapay Zeka ve Otonom Sistemler
 
AI Security : Machine Learning, Deep Learning and Computer Vision Security
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
 
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...
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
 
Python Programlama Dili
Python Programlama DiliPython Programlama Dili
Python Programlama Dili
 
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21
 
İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 20
 
İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19
 
İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18
 
İleri Seviye T-SQL Programlama - Chapter 17
İleri Seviye T-SQL Programlama - Chapter 17İleri Seviye T-SQL Programlama - Chapter 17
İleri Seviye T-SQL Programlama - Chapter 17
 
İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16
 

Go Programlama Dili - Seminer

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 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/
  • 23.
  • 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.
  • 50.
  • 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!)
  • 80.
  • 81.
  • 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.

Notas do Editor

  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