Junior
Go dilinde dizeler nasıl çalışır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da dizeler değiştirilemez byte dizileridir. Değiştirilemezlik garantisiyle "byte dilimi" ([]byte) olarak temsil edilirler.
Ana özellikler:
- Değiştirilemezlik: Bir dize oluşturulduktan sonra değiştirilemez. Düzeltmeye çalışan herhangi bir işlem aslında yeni bir dize oluşturur.
- Temsil: Varsayılan olarak, Go'daki dizeler UTF-8 kodlu metni temsil eder. Ancak, bunlar sadece byte dizileridir; UTF-8 olarak yorumlama, rune'lar üzerinde çalışırken gerçekleşir.
- Rune'lar: Go'daki Unicode karakterleri
runetipiyle temsil edilir, buint32'nin takma adıdır.rangekullanılarak yapılan döngü, UTF-8'i otomatik olarak çözer ve rune'lar ile başlangıç indekslerini sağlar. - Uzunluk:
len(s)fonksiyonu, dizenin byte sayısını döner, karakter (rune) sayısını değil. Rune sayısını almak içinutf8.RuneCountInString(s)veyarangeile döngü kullanılabilir. - Birleştirme: Dizeleri birleştirmek için
+operatörü kullanılır. Bu yeni bir dize oluşturur. Çok sayıda diziyi verimli şekilde birleştirmek içinstrings.Builderkullanılması önerilir.
Örnekler:
// Dize tanımlama
str := "Hello, 世界"
// Dizenin uzunluğu (byte cinsinden)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1) (1) 世(3) 界(3))
// Rune'lar üzerinde döngü
runeCount := 0
for index, runeValue := range str {
// index - rune'un başlangıç indeksi (byte cinsinden)
// runeValue - rune
runeCount++
// fmt.Printf("İndeks: %d, Rune: %c (Değer: %d)\n", index, runeValue, runeValue)
}
// rune sayısı (9)
// Byte erişimi
// Dikkat: Bu bir byte, karakter değil!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // '世' karakterinin başlangıç byte'ı
// Dize birleştirme
newStr := str + "!"
// Verimli birleştirme için strings.Builder kullanımı
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
efficientStr := builder.String() // "Hello, World"