0Pricing
Go Academy · Ders

Runeler ve Baytlar

Go dizelerinin iç yapısını anlayın

Runeler ve Baytlar, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Go Dizesi Nedir?

Go'da bir string, değiştirilemez bir bayt dizisidir. Baytlar genellikle UTF-8 ile kodlanmış metin içerir, ancak Go bunu zorunlu kılmaz.

  • Bir dizeyi yerinde değiştiremezsiniz.
  • len değeri karakterleri değil, baytları sayar.
package main

import "fmt"

func main() {
    s := "Go"
    fmt.Println(s)
    fmt.Println(len(s))
}

Arka Plandaki Baytlar

Bir dizeyi s[i] ile dizinlemek tek bir bayt döndürür (türü byte, uint8 için bir diğer addır).

Düz ASCII metninde her karakter tam olarak bir bayttır.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(s[0])
    fmt.Println(s[1])
    fmt.Println(s[2])
}

Bayt Bir Sayıdır

Bayt yalnızca bir sayı olduğundan, s[0] yazdırıldığında harf yerine 65 (A'nın ASCII kodu) gösterilir.

Karakteri görmek için baytı yeniden dizeye dönüştürün.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(string(s[0]))
}

rune Nedir?

Bir rune, int32 için bir diğer addır ve tek bir Unicode kod noktasını temsil eder.

  • UTF-8 olarak kodlandığında tek bir rune birden çok bayta yayılabilir.
  • Ham baytlarla değil, karakterlerle ilgileniyorsanız runeları kullanın.
package main

import "fmt"

func main() {
    var r rune = 'A'
    fmt.Println(r)
    fmt.Println(string(r))
}

Çok Baytlı Karakterler

ASCII dışındaki karakterler UTF-8'de birden fazla bayt kullanır. "héllo" gibi bir dizede harf sayısından daha fazla bayt bulunur.

len değerinin, görünen uzunluktan daha büyük olan bayt sayısını bildirdiğine dikkat edin.

package main

import "fmt"

func main() {
    s := "héllo"
    fmt.Println(len(s))
}

Dize Üzerinde Gezinme

Bir dize üzerindeki for range döngüsü UTF-8 kodunu otomatik olarak çözer. Her yineleme şunları üretir:

  • runenin başladığı bayt indisini,
  • runenin kendisini.
package main

import "fmt"

func main() {
    for i, r := range "héllo" {
        fmt.Println(i, string(r))
    }
}

Karakterleri Doğru Sayma

Baytlar yerine karakterleri saymak için dizeyi bir []rune değerine dönüştürün ve uzunluğunu alın.

Bu, kod noktalarının sayısını verir.

package main

import "fmt"

func main() {
    s := "héllo"
    runes := []rune(s)
    fmt.Println(len(runes))
}

Rune ile Dizinleme

Bir []rune değerine sahip olduğunuzda, çok baytlı metinlerde bile N'inci karakteri güvenilir biçimde almak için bu değeri dizinleyebilirsiniz.

package main

import "fmt"

func main() {
    runes := []rune("héllo")
    fmt.Println(string(runes[1]))
}

Dizeleri Baytlara ve Geri Dönüştürme

Bir dize ile []byte arasında serbestçe dönüştürme yapabilirsiniz.

  • []byte(s) ham baytları verir.
  • string(b) metni yeniden oluşturur.
package main

import "fmt"

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

Runelardan Dize Oluşturma

Bir rune dilimi de aynı şekilde yeniden dizeye dönüştürülür. Bu, karakterleri tek tek düzenledikten sonra kullanışlıdır.

package main

import "fmt"

func main() {
    runes := []rune{'G', 'o', '!'}
    fmt.Println(string(runes))
}

Baytlar ve Runeların Özeti

Kısa zihinsel model:

  • byte = tek bir ham bayt (uint8), len(s) bunları sayar.
  • rune = tek bir Unicode kod noktası (int32), range bunları üretir.
  • Karakterleri sayarken veya dizinlerken []rune kullanın.
package main

import "fmt"

func main() {
    s := "café"
    fmt.Println(len(s))
    fmt.Println(len([]rune(s)))
}

Kısa kontrol

Runelar ve baytlar konusundaki anlayışınızı sınayın.

Özet: Runelar ve Baytlar

Go dizelerinin genellikle UTF-8 kullanan değiştirilemez bayt dizileri olduğunu öğrendiniz.

  • byte ham bir bayttır; len baytları sayar.
  • rune bir Unicode kod noktasıdır; range bunların kodunu çözer.
  • Uygun düzeyde çalışmak için []byte(s) ve []rune(s) ile dönüştürme yapın.
package main

import "fmt"

func main() {
    s := "Go語"
    fmt.Println("bytes:", len(s))
    fmt.Println("runes:", len([]rune(s)))
}

Sıkça Sorulan Sorular

“Runeler ve Baytlar” dersi ücretsiz mi?

Evet — “Runeler ve Baytlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Runeler ve Baytlar” dersinde ne öğreneceğim?

Go dizelerinin iç yapısını anlayın Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Runeler ve Baytlar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Runeler ve Baytlar
  2. strings Paketi İşlevleri
  3. strings.Builder
  4. Unicode ve utf8
← Go Academy Sayfasına Dön