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, Дүйнө"