Junior
Ինչպես են աշխատում տողերը Go լեզվում?
sobes.tech AI
Պատասխան AI-ից
Go- ում տողերը անփոփոխ հաջորդականություններ են բայթների։ Դրանք ներկայացնում են «բայթային կտոր» ([]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)ր(3)ք(3))
// Ռուների անցում
runeCount := 0
for index, runeValue := range str {
// index - ռունի սկզբնական ինդեքսը բայթով
// runeValue - ռուն
runeCount++
// fmt.Printf("Index: %d, Rune: %c (Value: %d)\n", index, runeValue, runeValue)
}
// runeCount - ռուների քանակը (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"