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))

// Руна аркылуу өтүү
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("Дүйнө")
efficientStr := builder.String() // "Hello, Дүйнө"