Sobes.tech
Junior

Hogyan működnek a stringek a Go nyelvben?

sobes.tech MI

Válasz az MI-től

A Go nyelvben a sztringek változatlan byte-sorozatok. Ezek egy "byte-szeletet" ([]byte) képviselnek, amely garantálja a változatlanságot.

Fő jellemzők:

  • Változatlanság: A létrehozás után a sztring nem módosítható. Bármilyen művelet, amely módosításnak tűnik, valójában egy új sztringet hoz létre.
  • Ábrázolás: Alapértelmezés szerint a Go sztringjei UTF-8 kódolt szöveget képviselnek. Ezek azonban egyszerű byte-sorozatok; az értelmezés UTF-8-ként történik, amikor runékkal dolgozunk.
  • Runék: A Unicode karakterek Go-ban a rune típusban vannak, amely az int32 aliasa. A range használatával végzett iteráció automatikusan dekódolja az UTF-8-at, és rune-okat, valamint azok kezdő indexeit adja meg byte-okban.
  • Hossz: A len(s) függvény a sztring byte-számát adja vissza, nem a karakterek (rune-ok) számát. A rune-ok számának meghatározásához használja a utf8.RuneCountInString(s)-et vagy a range-et.
  • Összefűzés: A sztringek összefűzéséhez az + operátort használjuk. Ez egy új sztringet hoz létre. Sok sztring hatékony összefűzéséhez ajánlott a strings.Builder használata.

Példák:

// Sztring deklarálása
str := "Hello, 世界"

// Sztring hossza (byte-ban)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1)  (1) 世(3) 界(3))

// Iterálás runékon
runeCount := 0
for index, runeValue := range str {
	// index - a rune kezdő indexe byte-okban
	// runeValue - a rune
	runeCount++
	// fmt.Printf("Index: %d, Runa: %c (Érték: %d)\n", index, runeValue, runeValue)
}
// rune-ok száma (9)

// Byte-hoz való hozzáférés index alapján
// Figyelem: ez egy byte, nem egy karakter!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // A '世' karakter kezdő byte-ja

// Sztringek összefűzése
newStr := str + "!"

// A hatékony összefűzéshez a strings.Builder használata
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
efficientStr := builder.String() // "Hello, World"