Golang hash fonksiyonlari

Merhaba arkadaşlar

Golang ile temel ve yaygın kullanılan hash algoritlamarını nasıl kullanabileceğimizle ilgili bir örnek paylaşmak istedim.

package main


import (
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"fmt"
)

func main() {

string := "Golang hash"

hmd5 := md5.Sum([]byte(string))
hsha1 := sha1.Sum([]byte(string))
hsha256 := sha256.Sum256([]byte(string))

fmt.Printf(" MD5: %x\n", hmd5)
fmt.Printf(" SHA1: %x\n", hsha1)
fmt.Printf("SHA256: %x\n", hsha256)
}

Golang’te Değişken türleri ve tanımlamaları

Her programın bazı verileri ve bilgileri bellekte saklaması gerekir. Veriler, belirli bir bellek konumunda saklanırlar.

Değişken dediğimiz şeyler, verilerin saklandığı bir hafıza konumuna verilen uygun bir isimdir. Bir adın dışında her değişkenin de ilişkili bir türü vardır.

Değişken türleri(int,string) ilgili veri kümelerini kategorilere ayırır, ram bellek üzerinde saklanma biçimlerini, tutabilecekleri değer aralığını ve üzerlerinde yapılabilecek işlemleri tanımlamaktadırlar.

Kısa bir girişten sonra go da nasıl değişken tanımlarız incelemeye başlayalım.

Var anahtar sözcüğü ile değişken tanımlama

İlk inceleyeceğimiz tür var anahtar sözcüğü ile oluşturulan olucaktır.Burda dikkatini çeken şey tiplerin değişken isimlerinden sonra gelmesi olabilir.Çoğu programlama dilinden farklı olarak golang’te öncelikle değişken adı sonra türü gelmektedir.Aşağıdaki örneği inceleyelim.

var a int
var b bool
a = 15
b = false

Short-hand notation (:=) ile değişken tanımlama

a := 15
b := false

Bu şekilde bir tanımlama yaptığınız zaman sadece bir deklarasyon yapmakla kalmayıp aynı zamanda bir değer ataması yapmış oluyorsunuz; ancak bazı göz ardı etmememiz gereken hususlar var. Örneğin, yukarıdaki yöntemle aynı değişkeni iki kez tanımlayın aynı değeri atadığınız zaman Go Compiler size hata veriyor. Yine aynı şekilde short-hand notation ile değişkenleri fonksiyonların dışında tanımlayamıyorsunuz.

Go, Statik olarak yazılan bir dil olmasına rağmen, beyan ettiğiniz her değişkenin türünü açıkça belirtmenizi gerektirmez.

Başlangıç değeri olan bir değişkeni bildirdiğinizde, Golang otomatik olarak değişkenin türünü sağ taraftaki değerden alır. Bu nedenle, bildirim sırasında değişkeni başlatırken türü belirtmeniz gerekmez.

Çoklu değişken tanımlamaları

var (
  x int
  b bool
)

var (
  firtname , lastname string
  age int8
)

Ayrıca çoklu değişkeni tek satırdada tanımlayabilirsiniz.

a, b := 20, 16

Zero values

Golang’te tanımladığınız değiikene herhangir bir değer atamazsanız değişken türüne göre boş değer atanacaktır.Aşağıdaki tabloda tipine göre başlayacağı sıfır değerlerini görebilirsiniz.

TypeZero values
boolfalse
string“”
int, int8, int16 vs.0
float32, float640.0

Değişken Türleri

Go’da değişken tanımlamayı inceledikten sonrada şimdi değişken tiplerimi inceleyelim.

Boolean

Boolean tipi aslında hepimizin aşina olduğu içerisine mantıksal olarka true ve false tutan değişken tipidir.

Sayısal Tipler

Go, int,float gibi diğer programlama dillerinden iyi tanıdğımız değişken tipine sahiptir. Bu tür makineniz için uygun uzunluğa sahiptir, yani 32 bitlik bir makinede 32 bit ve 64 bitlik bir makinede 64 bittir.

Uzunluk hakkında açık olmak istiyorsanız, int32 veya uint32 ile de buna sahip olabilirsiniz. (İmzalı ve imzasız) tamsayıların tam listesi int8, int16, int32, int64 , uint8, uint16, uint32, uint64‘tür.

Ayrıca küsuratlı sayılar için kullanabileceğimiz float32 ve float64 türleride golang’te mevcuttur.

Örneğin kullanıcınızın yaşını tutacaksanız int8 ile daha kısa bi aralık belirleyip belleğinizi daha verimli kullanabilirsiniz.

Not: u ile başlayan veri tipleri bir çok dilden bildiğimiz üzere unsigned(sinyalsiz)’dir yani 0’dan küçük-eksi değer alamaz.

Strings
Bir diğer önemli değişken türü ise gene hepimizin aşina olduğu stringlerdir.

s := "Hello World!"

Go’daki string, çift tırnak içine alınmış bir dizi UTF-8 karakteridir (”). Tek tırnak (’) kullanırsanız, bir karakter (UTF-8 ile kodlanmış) anlamına gelir; Bu, Go’da bir string değildir.Yeni başlayanların genellikle en çok hata yaptığı noktadır.O yüzden dikkat etmenizde fayda var.

Bir değişkene string atandıktan sonra içerisinden karakter değiştirilemez

C’den gelen insanlar için; Go’da aşağıdaki işlem hata verecektir.

var s string = "test"
s[0] = 'c' ← Birinci karaktei ’c’ ile değiştir. Fakat bu bir hatadır

Eğer böyle birşey yapma ihtiyacınız varsa aşağıdaki kod’u incelemenizi öneririm.

s := "test"
c := []rune(s)
c[0] = 'c'
s2 := string(c)
fmt.Printf("%s\n", s2)

Şimdi adım adım kod’ta ne yaptığımıza bir bakalım.

  • İlk Önce rune(Unicode kod noktalarını temsil ederler.) ile string’imizi rune array’ine dönüştürdük.
  • Daha sonra bu array’in ilk elemanını değiştirdik.(Tek tırnak kullanıldığına dikkat edin.)
  • Daha sonra rune tipinde değer tutan array’imizi tekrar string’e çevirip ekrana yazdırdık.

Runes

Rune, aslında int32 için bir alias’dır UTF-8 kod noktasıdır.

Rune değişmez değerleri yalnızca 32 bit tam sayı değerleridir (ancak türsüz sabitlerdir, bu nedenle türleri değişebilir). Unicode kod noktalarını temsil ederler. Örneğin, rune değişmez değeri ‘a’ aslında 97 sayısıdır.

fmt.Println([]rune("cafe")) // [99 97 102 233]

Rune tipi ile ilgili ileride daha detaylı yazı hazırlamayı düşünüyorum.Rune türü ile ilgili daha detaylı bilgi için aşağıdaki kaynaklara göz atabilirsiniz