SlideShare une entreprise Scribd logo
1  sur  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.

Contenu connexe

Tendances

AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기
AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기
AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기Amazon Web Services Korea
 
Serverless and Design Patterns In GCP
Serverless and Design Patterns In GCPServerless and Design Patterns In GCP
Serverless and Design Patterns In GCPOliver Fierro
 
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMISINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMIErtugrul Akbas
 
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理Yuki Hattori
 
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...Amazon Web Services Korea
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Noa Harel
 
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıWindows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıBGA Cyber Security
 
Arp protokolu ve guvenlik zafiyeti
Arp  protokolu ve guvenlik zafiyetiArp  protokolu ve guvenlik zafiyeti
Arp protokolu ve guvenlik zafiyetiBGA Cyber Security
 
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...Amazon Web Services
 
20200721 AWS Black Belt Online Seminar AWS App Mesh
20200721 AWS Black Belt Online Seminar AWS App Mesh20200721 AWS Black Belt Online Seminar AWS App Mesh
20200721 AWS Black Belt Online Seminar AWS App MeshAmazon Web Services Japan
 
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimiBeyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimiKurtuluş Karasu
 
데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online Series
데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online Series데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online Series
데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online SeriesAmazon Web Services Korea
 
クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0
クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0
クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0Tomohisa Koyanagi
 

Tendances (20)

Sizma testi bilgi toplama
Sizma testi bilgi toplamaSizma testi bilgi toplama
Sizma testi bilgi toplama
 
Azure Key Vault
Azure Key VaultAzure Key Vault
Azure Key Vault
 
AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기
AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기
AWS Summit Seoul 2023 | AWS에서 OpenTelemetry 기반의 애플리케이션 Observability 구축/활용하기
 
Serverless and Design Patterns In GCP
Serverless and Design Patterns In GCPServerless and Design Patterns In GCP
Serverless and Design Patterns In GCP
 
BTRisk Android Mobil Uygulama Denetimi Eğitimi
BTRisk Android Mobil Uygulama Denetimi EğitimiBTRisk Android Mobil Uygulama Denetimi Eğitimi
BTRisk Android Mobil Uygulama Denetimi Eğitimi
 
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
 
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMISINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
 
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
 
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
데이터 과학자를 위한 신규 인공지능 서비스 - 김대근, 이유동, AWS AI/ML 스페셜리스트 솔루션즈 아키텍트 / 소성운, 카카오스타일 ...
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)
 
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme ÇalışmalarıWindows İşletim Sistemi Yetki Yükseltme Çalışmaları
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
 
Migartion to AWS
Migartion to AWSMigartion to AWS
Migartion to AWS
 
Kablosuz Ağlarda Adli Analiz
Kablosuz Ağlarda Adli AnalizKablosuz Ağlarda Adli Analiz
Kablosuz Ağlarda Adli Analiz
 
Arp protokolu ve guvenlik zafiyeti
Arp  protokolu ve guvenlik zafiyetiArp  protokolu ve guvenlik zafiyeti
Arp protokolu ve guvenlik zafiyeti
 
Black Belt Online Seminar AWS Amazon RDS
Black Belt Online Seminar AWS Amazon RDSBlack Belt Online Seminar AWS Amazon RDS
Black Belt Online Seminar AWS Amazon RDS
 
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
 
20200721 AWS Black Belt Online Seminar AWS App Mesh
20200721 AWS Black Belt Online Seminar AWS App Mesh20200721 AWS Black Belt Online Seminar AWS App Mesh
20200721 AWS Black Belt Online Seminar AWS App Mesh
 
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimiBeyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
 
데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online Series
데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online Series데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online Series
데이터베이스 운영, 서버리스로 걱정 끝! - 윤석찬, AWS 테크에반젤리스트 - AWS Builders Online Series
 
クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0
クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0
クラウドコストを最適化せよ!マルチクラウド時代に届けるクラウド活用2.0
 

Similaire à 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
 
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
 
Dojotoolkit Nedir?
Dojotoolkit Nedir?Dojotoolkit Nedir?
Dojotoolkit Nedir?zehra doruk
 

Similaire à 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ış
 
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
 
Dojotoolkit Nedir?
Dojotoolkit Nedir?Dojotoolkit Nedir?
Dojotoolkit Nedir?
 

Plus 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
 
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
 
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
 
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
 
İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 13
İleri Seviye T-SQL Programlama - Chapter 13İleri Seviye T-SQL Programlama - Chapter 13
İleri Seviye T-SQL Programlama - Chapter 13Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11Cihan Özhan
 

Plus 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
 
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ş
 
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
 
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
 
İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 15
 
İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14
 
İleri Seviye T-SQL Programlama - Chapter 13
İleri Seviye T-SQL Programlama - Chapter 13İleri Seviye T-SQL Programlama - Chapter 13
İleri Seviye T-SQL Programlama - Chapter 13
 
İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12
 
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11
 

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.

Notes de l'éditeur

  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