Sobes.tech
Junior

Ինչպես կարելի է աշխատել տողերով Go լեզվում?

sobes.tech AI

Պատասխան AI-ից

Go լեզվում տողերը անփոփոխ հաջորդականություններ են բայթների։ Դրանք կարող են ներկայացնել ինչպես UTF-8 տեքստ, այնպես էլ ցանկացած երկկողմանի binary տվյալներ։

Հիմնական աշխատանքային մեթոդները՝

  • Հայտարարում և ինիցիալիզացիա:

    var s1 string           // Դատարկ տող
    s2 := "բարև"            // Տողի լիտերալով ինիցիալիզացիա
    s3 := `շատաշերտ
    տող`                 // Կեղտոտ տողի լիտերալ
    
  • Տողի երկարությունը:

    len(s2) // Բայտների քանակը։ "բարև" համար դա կլինի 12։
    
  • Բայտների հասանելիություն:

    b := s2[0] // Բայտ ստանալ ըստ ինդեքսի։ Վերադարձնում է 'բ' (UTF-8-ում):
    

    Ուղիղ հասանելիությունը բայտներին չի երաշխավորում UTF-8 նշանի ստացումը։

  • Ռուների (UTF-8 նշանների) հասանելիություն: Տողերը կարելի է անցնել ռուներով՝

    for index, runeValue := range s2 {
        fmt.Printf("Ինդեքս: %d, Ռունա: %c\n", index, runeValue)
    }
    

    Տողի երկարությունը ռուներով՝

    utf8.RuneCountInString(s2) // Ռուների քանակը։ "բարև" համար դա կլինի 6։
    
  • Տողերի կոնկատենացիա:

    str1 := "հարև"
    str2 := " աշխարհ"
    result := str1 + str2 // Կոնկատենացիա օպերատորով +
    

    Էֆեկտիվ կոնկատենացիայի համար օգտագործեք strings.Builder։

    var sb strings.Builder
    sb.WriteString("հարև")
    sb.WriteString(" ")
    sb.WriteString("աշխարհ")
    result := sb.String() // Արդյունքի տողը
    
  • Տողերի և բայտների սղոցների փոխարկում:

    byteslice := []byte(s2)   // Տողից բայտների սղոց
    rs := []rune(s2)          // Տողից ռուների սղոց
    
    backToString := string(byteslice) // Բայտների սղոցից տող
    backToString = string(rs)         // Ռուների սղոցից տող
    
  • strings մոդուլը: Պահպանում է բազմաթիվ օգտակար ֆունկցիաներ՝

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • strconv մոդուլը: Տողերի փոխարկում այլ տվյալների տիպերի (թվեր, բուլյան) և հակառակը։

    i, err := strconv.Atoi("123") // Տողից int
    s := strconv.Itoa(456)        // int-ից տող
    
  • Անփոփոխություն: Յուրաքանչյուր գործողություն, որը թվում է որպես տողի փոփոխում (օրինակ, կոնկատենացիա), իրականում ստեղծում է նոր տող։ Սա կարևոր է հաշվի առնել արդյունավետության համար հաճախակի փոփոխությունների ժամանակ։ Այդ դեպքում ավելի լավ է օգտագործել []byte կամ strings.Builder։