Sobes.tech
Junior

Go dilinde dizilerle nasıl çalışabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da dizeler değiştirilemez diziler olarak kabul edilir.

Dizelerle çalışma yöntemleri:

  1. Oluşturma:

    // Dize literal'i
    s1 := "Hello, Go!"
    
    // Byte diliminden
    byteArray := []byte{'H', 'e', 'l', 'l', 'o'}
    s2 := string(byteArray)
    
  2. Birleştirme:

    s3 := "World"
    result := s1 + " " + s3 // + operatörü kullanımı
    

    Çok sayıda birleştirme için strings.Builder kullanmak daha etkilidir:

    import "strings"
    
    var sb strings.Builder
    sb.WriteString("Hello")
    sb.WriteString(", ")
    sb.WriteString("World!")
    result2 := sb.String()
    
  3. Uzunluk:

    • Bayt cinsinden:
      byteLength := len(s1)
      
    • Karakter (rune) cinsinden:
      runeLength := utf8.RuneCountInString(s1) // "unicode/utf8" import edilmesi gerekir
      
  4. Karakterlere (rune) erişim ve yineleme: Go'da dizeler baytlardan oluşur, ancak range kullanılarak yineleme yapıldığında Unicode kod noktalarına (rune) çözülürler.

    import "fmt"
    
    for index, runeValue := range s1 {
        fmt.Printf("İndeks: %d, Rune: %c, Tip: %T\n", index, runeValue, runeValue)
    }
    

    Doğrudan indeks erişimi bayt döndürür, rune değil:

    b := s1[0] // 'H' baytını döndürür
    
  5. Dönüşüm:

    • Bayt dilimine:
      byteSlice := []byte(s1)
      
    • Rune dilimine:
      runeSlice := []rune(s1)
      
  6. strings paketi: Dizelerle çalışmak için birçok kullanışlı fonksiyon sağlar:

    • strings.Contains(s, substr): Alt dize içeriyor mu?
    • strings.HasPrefix(s, prefix): Öneki var mı?
    • strings.HasSuffix(s, suffix): Sonek var mı?
    • strings.Index(s, substr): İlk konumunu bulur.
    • strings.ReplaceAll(s, old, new): Tüm eşleşmeleri değiştirir.
    • strings.Split(s, sep): Dizeyi ayırır.
    • strings.Join(a []string, sep string): Dizeleri birleştirir.
    • strings.ToLower(s): Küçük harfe dönüştürür.
    • strings.ToUpper(s): Büyük harfe dönüştürür.
    • strings.TrimSpace(s): Baş ve sondaki boşlukları kaldırır.
  7. fmt paketi: Formatlı çıktı ve giriş için.

  8. strconv paketi: Dize ve sayısal tipler arasında dönüşüm yapar:

    import "strconv"
    
    i, err := strconv.Atoi("123") // String'ten int'e
    s := strconv.Itoa(i) // Int'ten string'e
    

Dizelerin değiştirilemezliği önemli olup, herhangi bir işlem (örneğin, birleştirme veya Replace) aslında yeni bir dize oluşturur.