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"