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)ო(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"