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"