Sobes.tech
Junior

Чӣ тавр кор мекунанд сатрҳо дар забони Go?

sobes.tech AI

Ҷавоб аз AI

Гўнгӣда сатрлар ўзгартирилмайдиган байтлар тизмидир. Улар "байт кесими" ([]byte) сифатида тасвирланади ва ўзгартирилмаслик кафолатланади.

Асосий хусусиятлар:

  • Ўзгартирилмаслик: Яратилгандан кейин, сатр ўзгартирилмайди. Ҳар қандай амалия, у ўзгартирилаётгандай кўринса ҳам, ҳақиқатда янги сатр яратади.
  • Тасвирлаш: Стандарт ҳолда, Goда сатрлар UTF-8 кодланган матнни тасвирлайди. Аммо улар фақат байтлар тизмидир; UTF-8 сифатида талқин қилиш руна билан ишлашда амалга оширилади.
  • Руналар: Unicode белгилари Goда rune тури билан тасвирланади, бу int32нинг ёрдамчи номи. range ёрдамида сатр бўйича такрорлаш автоматик равишда UTF-8-ни декод қилади ва руна ва уларнинг бошланғич индекслирини байтларда таъминлайди.
  • Узунлиги: len(s) функцияси сатрдаги байт сонини қайтариб, белгилар (руна) сонини эмас. Руна сонини олиш учун utf8.RuneCountInString(s) ёки range билан такрорлаш тавсия этилади.
  • Қўшиш: Сатрларни бирлаштириш учун + оператори қўлланилади. Бу янги сатр яратади. Кўп сатрларни самарали бирлаштириш учун strings.Builderдан фойдаланиш тавсия этилади.

Масалалар:

// Сатрни эълон қилиш
str := "Hello, 世界"

// Сатрнинг узунлиги (байтларда)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1)  (1) 世(3) 界(3))

// Рунага такрорлаш
runeCount := 0
for index, runeValue := range str {
	// index - руна бошланғич индекси байтларда
	// runeValue - руна
	runeCount++
	// fmt.Printf("Индекси: %d, Рунага: %c (Қиймати: %d)\n", index, runeValue, runeValue)
}
// руна сони (9)

// Байтга индекс бўйича кириш
// Эътибор беринг: бу байт, белгилар эмас!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // '世' белгисининг бошланғич байти

// Сатрларни қўшиш
newStr := str + "!"

// Самарали қўшиш учун strings.Builderдан фойдаланиш
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
efficientStr := builder.String() // "Hello, World"