[CENTER][B][SIZE=4][COLOR=rgb(255, 255, 255)]Selamlar herkese, bu konuda sizlere Go dilinin temellerinden bahsedeceğim. İyi okumalar dilerim[/COLOR][/SIZE][/B] [IMG width="555px"]https://i.hizliresim.com/qrs0ut1.png[/IMG] [B][SIZE=5][COLOR=RoyalBlue]Go(Lang) Nedir?[/COLOR][/SIZE] [SIZE=4][COLOR=White]GoLang, Google tarafından 2007 yılında geliştirilmeye başlanan bir açık-kaynak programlama dilidir. Sistem programlama(system programming) için tasarlanmıştır ve derlenmiş(compiled), statik tipli(static typed) bir dildir. Windows, Linux, OS X gibi popüler sistemleri desteklemekle beraber 2015 yılında akıllı telefonlar için de geliştirilmeye başlanmıştır. Çapraz platform(cross-platform) bir prorgamlama dili diyebiliriz. İlk başta bir deney olarak çıkmıştır. Bu dilin oluşumu günümüzde fazlasıyla kullanılan diğer dillerin eksik ya da kullanışsız yönlerini tespit edip bu yönleri engellenmesi, aynı zamanda günümüzde popüler dillerin tercih edilme sebeplerini tespit ederek güzel, işe yarayan özelliklerinin harmanlanmasıyla gerçekleştirilmiştir. Topluluklarda c ile pythonun karışımı olduğu da söylenmektedir. Java, C++ gibi statik, güçlü olmakla beraber okunabilirliği de python gibidir. Keyword dediğimiz anahtar kelimeler go dilinde 25 adettir. Diğer dillerle karşılaştırmak gerekirse C dilinde 32, C++ dilinde 30(?), pythonda da 33 tane keyword bulunmaktadır. Ağ(network) ve çoklu işlem(multi processing) işlemleri desteklemektedir. Ek olarak belirtmek isterim ki röportajlar sırasında böyle bir dil yapmalarının sebebinin C++'ın karmaşık olduğunu belirtmişlerdir. [IMG width="494px" alt="47m78xq.gif"]https://images-ext-1.discordapp.net/external/IAQAUzyWAuaCi3FpLUdcetuh_PuLUPQgFjSsWERNFkY/https/i.hizliresim.com/47m78xq.gif[/IMG] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]Go(Lang) Kurulumu[/COLOR][/SIZE][/COLOR][/SIZE][/B][/COLOR][/SIZE] [SIZE=4][COLOR=White][B][SIZE=4][COLOR=White]Go dilinin kurulumu çok basittir. Fazla bir gereksinim istememektedir. Cihaza kurulması gerekenler git ve go'dur. Eğer git ve go kurulmassa cihazlarda go ile yazılmış programlar çalıştırılamaz. Kodlama ortamı için herhangi bir text editör tercih edilebilir. Ben Visual Studio Code kullanıyorum. [/COLOR][/SIZE] [SIZE=4][COLOR=White][COLOR=RoyalBlue][URL='http://www.wadewegner.com/2014/12/easy-go-programming-setup-for-windows/']GoLang Kurulum Kaynak 1 [EN][/URL][/COLOR][/COLOR][/SIZE][/B][/COLOR] [COLOR=White][B][SIZE=4][COLOR=White][COLOR=royalblue][URL='https://www.codegeni.us/go-kurulumu-ve-path-ayarlari-windows/']GoLang Kurulum Kaynak 2 [TR][/URL][/COLOR][/COLOR][/SIZE][/B][/COLOR] [COLOR=White][B][SIZE=4][COLOR=White][COLOR=royalblue][URL='https://code.visualstudio.com/download']Visual Studio Code İndir[/URL][/COLOR][/COLOR][/SIZE][/B][/COLOR] [COLOR=White][B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]İlk Programımızı Yazalım[/COLOR][/SIZE][/COLOR][/SIZE][/B][/COLOR][/SIZE] [SIZE=4][COLOR=White][B][SIZE=4][COLOR=White]Gerekli kurulumlar da yapıldığında göre artık go yazmaya başlayabiliriz. Biz de herzaman ki geleneğe uyarak tabiki Dünya'ya merhaba diyeceğiz. İlk başta kullanacağımız text editörünü açalım. Yeni bir dosya oluşturalım, adlandırıp uzantısını go yapalım. Aşağıdaki kodu girelim ve programı kaydedelim.[/COLOR][/SIZE][/B] [CODE]package main[/COLOR][/SIZE][/B][/CENTER] [B][SIZE=4][COLOR=White][CENTER] import "fmt" func main() { fmt.Println("Selamlar GoLang Dünyası ") }[/CODE][/CENTER][/COLOR][/SIZE][/B] [CENTER] [B][SIZE=4][COLOR=White][B][SIZE=4][COLOR=White]Kodları şimdilik pek anlamamanız normal fakat ilk programımız hazır diyebiliriz. Çalıştırmamız için cmd ya da kullandığınız komut istemcisi üzerinde programın bulunduğu dizine gittikten sonra aşağıdaki komutu yazmamız yeterli olacaktır;[/COLOR][/SIZE][/B] [IMG width="600px" alt="5aE7rL.png"]https://i.hizliresim.com/5aE7rL.png[/IMG][/COLOR][/SIZE][/B] [/CENTER] [QUOTE] [CENTER][B][SIZE=4][COLOR=rgb(255, 255, 255)]go run dosyaadi.go[/COLOR][/SIZE][/B][/CENTER] [/QUOTE] [CENTER] [B][SIZE=4][COLOR=White][B][SIZE=4][COLOR=White]Peki her yazdığımız programı böyle mi çalıştıracağız? Tabiki de hayır! Uzantısına da bakarsanız göreceksiniz ki bu bir go dosyası. Eğer bunu çalıştırılabilir yani executable hale getirmek istersek aşağıdaki komutu yazmamız gerekir;[/COLOR][/SIZE][/B][/COLOR][/SIZE][/B] [/CENTER] [QUOTE] [CENTER][B][COLOR=rgb(255, 255, 255)][SIZE=4]go build dosyaadi.go[/SIZE][/COLOR][/B][/CENTER] [/QUOTE] [CENTER] [B][SIZE=4][COLOR=White][B][SIZE=4][COLOR=White]Yazmış olduğumuz programın bulunduğu dizine gittiğimizde aşağıdaki gibi bir görüntü ile karşılaşacaksınızdır. Yani sadece bir go dosyası var ve çalıştırabilmemiz için komut istemcisinden bulunduğa dizine gidip yukarıda bahsettiğim komutu kullanmamız gerekir(go run ....). [/COLOR][/SIZE][/B] [IMG width="390px"]https://i.hizliresim.com/222s23j.png[/IMG] Ancak komut istemcisi üzerinden programın bulunduğu dizine gidip programı çalıştırılabilir hale getirdiğimiz komutu(go build....) girdikten sonra programın olduğu dizinde yazmış olduğumuz programın ".exe" formatında executable(çalıştırılabilir) olduğunu göreceksiniz. Hadi şimdi go dilinin derinliklerine inelim...[/COLOR][/SIZE][/B] [IMG width="543px" alt="47m78xq.gif"]https://images-ext-1.discordapp.net/external/IAQAUzyWAuaCi3FpLUdcetuh_PuLUPQgFjSsWERNFkY/https/i.hizliresim.com/47m78xq.gif[/IMG] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]"fmt" Paketi[/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Yazmış olduğumuz ilk kodda da görebileceğiniz üzere "fmt" isimli bir kütüphane kullandık. Bu kütüphane belki de go ile yazacağınız programların çoğunda geçecektir. Çünkü içerisinde I/O dediğimiz input/output yani girdi ve çıktı işlemleri gerçekleştirebileceğimiz fonksiyonları barındırır. Buradaki fonksiyonlar C dilindekilere benzemektedir ancak biraz daha basitleştirilmiş halleri diyebiliriz. Go dilinde bir paketin belirli bir özelliği kullanılmak istendiği zaman genellikle "paketismi.fonksiyon" şeklinde yazılmaktadır. "fmt" paketinde bulunan bir fonksiyonu da yine aynı şekilde kullanırız. Örnek olarak aşağıdaki fotoğrafa baktığımızda fmt paketinde bulunan birkaç fonksiyonu ve özeliklerini görebilirsiniz. Bu paketin detaylarını [URL='https://golang.org/pkg/fmt/']buraya[/URL] tıklayarak öğrenebilirsiniz.[/COLOR][/SIZE][/B] [IMG width="577px"]https://i.hizliresim.com/5hujevx.png[/IMG] [CODE]package main import "fmt" func main() { var a string // Bu satırda a isimli bir string değişken belirlendi fmt.Println("1. Bu println fonksiyonu") // 2.'yi yazdırdı ve alt satıra geçti fmt.Print("2. Bu da print fonksiyonu\n") // Eğer '\n' olmasaydı 2. ve 3. bitişik, yanyana olurdu. fmt.Printf("3. %T", a) // 'a' değişkeninin türünü yazdırdı. "%T" kullanıldığı için. (Type) }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]Değişkenler[/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Go dilinde birkaç yöntemle değişkenler tanımlanabilir. Aşağıda bulunan resimde go dilinde değişken tanımlamalarının nasıl yapıldığı gösterilmiştir. Ancak önemli bir nokta ise bu kullanımlar değişkeni "ilk" defa tanımlarken kullanılmaktadır. Değeri değiştirilecekse eğer "=" yeterlidir.[/COLOR][/SIZE][/B] [IMG width="360px"]https://i.hizliresim.com/ne04zeu.png[/IMG] [CODE]package main import "fmt" func main() { var degiskenadi = "Burası da değişkenin içeriği" // String yani yazı formatında değişken tanımladık var degisken1, degisken2 = 50, 100 // İkisi de integer(int)(tam sayı) formatında 2 değişken tanımladık var turkhackteam = true //Boolean (True ya da False) olabilecek bir değişken tanımladık tht := "bu da bir değişken" fmt.Println(degiskenadi) fmt.Println(degisken1) fmt.Println(degisken2) fmt.Println(turkhackteam) fmt.Println(tht) }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]For Döngüsü[/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Go dilinde "while" döngüsü bulunmamaktadır. Yapılan işlemler herzaman for ile gerçekleştirilmektedir. Aşağıdan çok temel bir for döngüsü kullanımını görebilirsiniz.[/COLOR][/SIZE][/B] [IMG]https://i.hizliresim.com/bnl8s4j.png[/IMG] [CODE]package main import "fmt" func main() { for i := 0; i < 10; i++ { fmt.Println("Burası for döngüsü devam ettikçe gerçekleşir.") } }[/CODE] [B][SIZE=4][COLOR=White]Başka bir örnek;[/COLOR][/SIZE][/B] [IMG]https://i.hizliresim.com/guo32s9.png[/IMG] [CODE]package main import "fmt" func main() { for i := 0; i < 10; i++ { fmt.Println(i) } }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]If/Else [/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Go dilinde herhangi bir "else" durumu olmadan da "if" kullanabilirsiniz. Hemen hemen diğer dillerdeki kullanımları benzemektedir. [I]1. Hangi durumun gerçekleşeceğini programın çıktısı belirler. 2. Birden çok durum için birçok opsiyon olur 3. If bloğu içerisinde herhangi bir durum uygulanmassa, (oluşturulduysa) "else" bloğu çalıştırılır.[/I][/COLOR][/SIZE][/B] [IMG width="361px"]https://i.hizliresim.com/7ipj3uf.png[/IMG] [CODE]package main import "fmt" func main() { var a string = "1234" if a == "4321" { fmt.Println("a 4321'dir") } else if a == "0123" { fmt.Println("a 0123'tür.") } else { fmt.Println("a'nın değeri başkadır.") } }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]Switch/Case [/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Switch case durumlarının kullanımları da if/else'e benzemektedir. Genellikle bir durumun birden çok olasılığı varsa kullanılır. [I]1. Hangi durumun gerçekleşeceğini kişi belirler. 2. Bir durum için birçok olasılık olur 3. Oluşturulan durumlardan hiçbiri tutmuyorsa eğer oluşturulmuşsa "default" yani varsayılan durum gerçekleştirilir. [IMG width="384px"]https://i.hizliresim.com/gpbo0fv.png[/IMG][/I][/COLOR][/SIZE][/B] [CODE]package main import "fmt" func main() { num := 2002 switch num { case 2015: fmt.Println("Turkhackteam 2015 yılında kuruldu.") case 2020: fmt.Println("Turkhackteam 2020 yılında kuruldu.") case 2002: fmt.Println("Turkhackteam 2002 yılında kuruldu.") } }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]Diziler[/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]İngilizcede arrays olarak geçmektedirler. Toplu işlemlerde ciddi kolaylık sağlarlar.[/COLOR][/SIZE][/B] [IMG width="296px"]https://i.hizliresim.com/gcbe90x.png[/IMG] [CODE]package main import "fmt" func main() { var dizi1 [10]int // İçerisinde 10 tane tam sayı bulunduran bir dizi oluşturduk dizi1[0] = 1 // Dizide 1. sayının 1 olduğunu belirttik dizi1[9] = 10 // Dizide 10. sayının 10 olduğunu belirttik dizi1[1] = 3500 // Dizide 2. sayının 3500 olduğunu belirttik fmt.Println(dizi1) //Diziyi yazdırdık //1. 2. ve 10. elemanlar dışında diğer elemanlara değer girmediğimiz için 0 yazdırdı }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]Fonksiyonlar[/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Fonksiyonların kullanımı diğer dillerideki gibidir. Kodların okunabilirliğini ve işlevlerini arttırmaktadırlar.[/COLOR][/SIZE][/B] [IMG width="313px"]https://i.hizliresim.com/hgi3281.png[/IMG] [CODE]package main import "fmt" func toplama(sayi1 int, sayi2 int) int { return sayi1 + sayi2 } func cikti(metin string) string { fmt.Println(metin) return metin } func main() { fmt.Println(toplama(5, 10)) cikti("TurkHackTeam //aqua") }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]İşaretçiler[/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Pointer olarak geçmektedirler. Herhangi bir değişkenin ya da veri yapısının RAM'de nerede olduğunu belirten veri tipidir. Aşağıda bulunan örnekte pointer kullanarak golang'te nasıl kullanıcıdan input alındığını görebilirsiniz.[/COLOR][/SIZE][/B] [IMG]https://i.hizliresim.com/r8w9ddg.png[/IMG] [CODE]package main import "fmt" func main() { var username string fmt.Print("Lütfen THT kullanıcı adınızı giriniz: ") fmt.Scanln(&username) fmt.Println("Hoşgeldiniz,", username) }[/CODE] [B][SIZE=4][COLOR=White][SIZE=5][COLOR=royalblue]GoLang ile Veritabanı İşlemleri[/COLOR][/SIZE][/COLOR][/SIZE] [SIZE=4][COLOR=White]Veritabanları, bir grup verileri bir arada ve düzenli şekilde tutan yapılardır. Sunucularda, websitelerde günümüzde çoğu yerde bulunmaktadırlar. Go dilinde bulunan mongodb, sql gibi kütüphaneler aracılığıyla da bu veritabanları üzerinde işlem yapabiliriz. Ben sizlere uygulamalı gösterirken sqlite veritabanını kullanacağım. Go dilinde herhangi bir kütüphaneyi yüklemek için komut istemcisini açıp "go get ... " yazmamız yeterli olacaktır. Öncelikle sqlite veritabanı kütüphanelerini komut istemcisi üzerinden indiriyoruz. (go get github.com/mattn/go-sqlite3) Herhangi bir hata ile karşılaşırsanız github üzerinden indirip go dosyalarının içerisine de atabilirsiniz. Ya da başka bir çözüm için[URL='https://github.com/mattn/go-sqlite3/issues/467'] buraya[/URL] tıklayın. Kullanacağımız kütüphaneyi kurduktan sonra şimdi de sqlite veritabanı oluşturmamız için kullanacağımız db browser'ı yüklememiz gerekmekte. [URL='https://sqlitebrowser.org/dl/']Bu[/URL] linkte tıklayarak cihazımıza uygun sürümü indiriyoruz. Ardından klasik kurulum gerçekleştiriyoruz.[/COLOR][/SIZE][/B] [IMG width="505px"]https://i.hizliresim.com/11zlznt.png[/IMG] [B][SIZE=4][COLOR=White]Kurulum işlemleri tamamlandığına göre sıra veritabanı üzerinde işlem yapmakta. İlk olarak projemizin bulunduğu dizine bir veritabanı klasörü oluşturalım. Programımızı çalıştırdıktan sonra "Yeni Veritabanı" butona basalım. Ardından açtığımız klasörün içerisine bir veritabanı dosyası oluşturalım.[/COLOR][/SIZE][/B] [IMG width="532px"]https://i.hizliresim.com/sld8i2m.png[/IMG][B][SIZE=4][COLOR=White][IMG]https://i.imgyukle.com/2020/11/21/TinEcP.png[/IMG] Ardından "users" isimli bir tablo oluşturalım ve içerisine tam sayı formatında id değişkeni ve string formatında user değişkeni atayalım. Veritabanımız hazır. Artık golang ile bu veritabanı üzerinde işlem yapabiliriz. Öncelikle işlem yapabilmek adına veritabanı ile bir bağlantı oluşturmamız gerekir. Aşağıdaki komut ile veritabanına düzgün bağlantı kurulup kurulamadığını görebiliriz.[/COLOR][/SIZE][/B] [CODE]package main import ( "database/sql" ) func main() { veritabanı, _ := sql.Open("sqlite3", "db/database1.db") db, _ := veritabanı.Query("Select ' from users") db.Close() veritabanı.Close()[/CODE] [B][SIZE=4][COLOR=White]Veritabanı üzerinde bağlantı kurduktan sonra users tablosu içerisinde bir user verisi girmek için aşağıdaki kodu yazıyoruz.[/COLOR][/SIZE][/B] [CODE]package main import ( "database/sql" "fmt" ) func main() { // veritabanıyla bağlantı kuruyoruz veritabani, _ := sql.Open("sqlite3", "db/database1.db") //veritabanına yeni veriyi nereye ekleyeceğimizi belirtiyoruz conn, _ := veritabani.Prepare("insert into users (name) values (?)") // veritabanına yeni isim ekliyoruz veriekle, _ := conn.Exec("TurkHackTeam Aqua") // Son eklenen user verisinin id numarasını alıyoruz idd, _ := veriekle.LastInsertId() // aldığımız id'yi yazdırıyoruz fmt.Println(idd) //Veritabanı bağlantısını kapatıyoruz. veritabani.Close() }[/CODE] [B][SIZE=4][COLOR=White]Yukarıda temel örnekler gibi golang ile de veritabanı işlemleri gerçekleştirebiliriz. [COLOR=royalblue][SIZE=5]GoLang Dosya İşlemleri[/SIZE][/COLOR][/COLOR][/SIZE] [SIZE=4][COLOR=White]Öncelikle en temelden dosya oluşturmak ile başlayalım. Aşağıda bulunan kodu yazıp programı çalıştırdığımızda programın olduğu dizinde vermiş olduğumuz ad ile bir dosya kaydedecektir. Programı çalıştırdıktan sonra bulunduğu dizine gidip baktığımızda istediğimiz dosyayı oluşturduğunu görebiliyoruz. Şimdi oluşturduğumuz dosya hakkında biraz bilgi edinelim. Yazacağımız komut ile adını, boyutunu, izinlerini, en son güncellendiği tarihi görebileceğiz.[/COLOR][/SIZE][/B] [CODE]package main import ( "fmt" "os" ) var fileinfo *os.FileInfo func main() { fileinfo, _ := os.Stat("bubirdosyadir.txt") fmt.Println(fileinfo.Name()) fmt.Println(fileinfo.Mode()) fmt.Println(fileinfo.Size()) fmt.Println(fileinfo.ModTime()) }[/CODE] [B][SIZE=4][COLOR=White]Ancak dosyanın içi boş ve hiçbir şey yazmadık. İçerisine bir yazı yazalım. Bir yazı yazdıktan sonra programı çalıştırdığımızda program hakkında bilgileri elde ediyoruz. Gördüğünüz gibi golang ile dosya işlemleri de yapılabilmekte. Vermiş olduğum örnekler çok basit ve yüzeysel gelmiş olabilir ancak kendiniz de çaba harcamadan maalesef kendinize bir şey katmanız zor.[/COLOR][/SIZE][/B] [IMG width="550px" alt="47m78xq.gif"]https://images-ext-1.discordapp.net/external/IAQAUzyWAuaCi3FpLUdcetuh_PuLUPQgFjSsWERNFkY/https/i.hizliresim.com/47m78xq.gif[/IMG] [B][SIZE=4][COLOR=White]Okuduğunuz için teşekkür ederim. Saygılar.[/COLOR][/SIZE][/B][/CENTER]