Sobes.tech
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"