Kullanışlı 5 Go Fonksiyonu

Yazılım geliştiriciler bir süre sonra sürekli aynı işlemi gerçekleştiren fonksiyonlara ihtiyaç duyarlar. Kimisi geleceği düşünüp bunları her an elinin altında bulundurur ve hatta yeniden kullanılabilir birer paket haline getirir, kimisi ise yazıp geçer ve arkasına bir daha bakmaz. Ben ise ilk örnekteki yazılımcı gibi Go projelerinde genellikle ihtiyaç duyduğum 5 fonksiyonu toparlayıp sizinle paylaşmak istedim. Sizin de olmazsa olmazlarınız varsa yorum olarak paylaşabilirseniz çok sevinirim

1. ByteToString – Byte Değişkeni Stringe Dönüştürme

Hemen her projede ihtiyacım olan bir konudur byte değişkeni string’e dönüştürme. Aslında byte’tan string’e ve string’den byte’a dönüştürmek için Go’nun aşağıdaki örnekte olduğu gibi kendi fonksiyonlarını kullanabilirsiniz.

package main

import (
	"fmt"
)

func main() {
	a := "foo"
	b := []byte("bar")
	fmt.Println([]byte(a))
	fmt.Println(string(b))
}

Bizim tercih ettiğimiz yöntem için iki farklı fonksiyon önerim var. Tercih size kalmış.

func BytesToStrings(b []byte) string {
	return fmt.Sprintf("%s", b)
}

veya

func BytesToString(b []byte) string {
	return string(b[:])
}

2. fmt.Println’dan Kurtulmak

Go’da özellikle geliştirme (dev) ortamında yapılan işlemin sonucunu ekrana yazdırmak için fmt.Println() kullanmaktayız. Ancak bununla birlikte Go’nun bir özelliği de değişkenlere değer olarak fonksiyon atayabilmemiz. Bu iki bilgiyi birleştirince ekrana bir şey yazdırmak için şöyle pratik bir çözüm üretebiliriz.

package main

import "fmt"

func main() {

	p := fmt.Println

	p("yakuter.com")

}

3. IsEmpty – Bir Klasörün Boş Olup Olmadığını Kontrol Etme

Bazı durumlarda Go ile bir klasörün boş olup olmadığını kontrol etme gereği duyarız. Bunun için de hazır bir fonksiyonumuz olmadığı için aşağıdaki gibi bir fonksiyon ile ihtiyacımızı karşılayabiliriz. Bu fonksiyon, klasörün içinde dosya varsa true, yoksa false döner. Eğer belirtilen isimde bir klasör yoksa ‘no such file or directory’ hata mesajı döner.

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	fmt.Println(IsEmpty("/xxx/yyy/zzz"))
}

func IsEmpty(name string) (bool, error) {
	f, err := os.Open(name)
	if err != nil {
		return false, err
	}
	defer f.Close()

	_, err = f.Readdir(1)
	if err == io.EOF {
		return true, nil
	}
	return false, err
}

4. Go ile Bir Klasörün İçindeki Tüm Dosyaları Silme

Bir üst maddedeki gibi bir klasörün içindekilerin varlığını kontrol etme ve bu klasördeki her şeyi silme aslında basit gibi dursa da biraz insanı uğraştıran konular. Ben de tekrar tekrar uğraşmamak için bir klasörün içini boşaltırken (tüm dosya ve klasörleri silmek için) aşağıdaki fonksiyondan faydalanıyorum.

package main

import (
	"os"
	"path/filepath"
)

func main() {
	err := RemoveContents("/aaa/bbb/ccc")
	if err != nil {
		panic(err)
	}
}

func RemoveContents(dir string) error {
	d, err := os.Open(dir)
	if err != nil {
		return err
	}
	defer d.Close()
	names, err := d.Readdirnames(-1)
	if err != nil {
		return err
	}
	for _, name := range names {
		err = os.RemoveAll(filepath.Join(dir, name))
		if err != nil {
			return err
		}
	}
	return nil
}

5. Go ile Metinleri Snake Case (snake_case) Yapma

Bazen bir metni küçültüp aralarına alt çizgi eklemek isteriz. İngilizce’de bunun karşılığı Snake Case şeklindedir. Go ile bunu başarmak için aşağıdaki fonksiyondan faydalanabilirsiniz.

package main

import (
	"fmt"
	"regexp"
	"strings"
)

func main() {
	fmt.Println(ToSnakeCase("AnkaraBursaAmasya"))
	// Çıktı: ankara_bursa_amasya
}

func ToSnakeCase(str string) string {
	var matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)")
	var matchAllCap = regexp.MustCompile("([a-z0-9])([A-Z])")

	snake := matchFirstCap.ReplaceAllString(str, "${1}_${2}")
	snake = matchAllCap.ReplaceAllString(snake, "${1}_${2}")
	return strings.ToLower(snake)
}
Total
0
Shares
Bir cevap yazın

E-posta hesabınız yayımlanmayacak.