Sobes.tech
Junior

Kaip dirbti su eilutėmis Go kalboje?

sobes.tech AI

Atsakymas iš AI

Eilutės Go kalboje yra nepakeičiami baitų sekos. Jos gali atstovauti tiek UTF-8 tekstą, tiek bet kokius dvejetainius duomenis.

Pagrindiniai darbo būdai:

  • Deklaravimas ir inicializavimas:

    var s1 string           // Tuščia eilutė
    s2 := "labas"            // Inicializacija su literalu
    s3 := `daugiaeilutė
    eilutė`             // Žaliųjų simbolių literalas
    
  • Eilutės ilgis:

    len(s2) // baitų skaičius. "labas" tai bus 5.
    
  • Prieiga prie baitų:

    b := s2[0] // baito gavimas pagal indeksą. Grąžins 'l' (UTF-8).)
    

    Tiesioginė prieiga prie baitų neu garantuoja simbolo gavimo UTF-8.

  • Prieiga prie rune (UTF-8 simbolų): Eilutes galima iteruoti per rune:

    for index, runeValue := range s2 {
        fmt.Printf("Indeksas: %d, Runa: %c\n", index, runeValue)
    }
    

    Eilutės ilgis rune:

    utf8.RuneCountInString(s2) // Ilgis rune. "labas" tai bus 5.
    
  • Eilutės sujungimas:

    str1 := "labas"
    str2 := " pasauli"
    result := str1 + str2 // Sujungimas operatoriumi +
    

    Efektyviam didelių eilučių sujungimui naudokite strings.Builder:

    var sb strings.Builder
    sb.WriteString("labas")
    sb.WriteString(" ")
    sb.WriteString("pasauli")
    result := sb.String() // Gauta rezultato eilutė
    
  • Eilučių ir baitų/rune fragmentų konvertavimas:

    byteslice := []byte(s2)   // Eilutė į baitų fragmentą
    rs := []rune(s2)          // Eilutė į rune fragmentą
    
    backToString := string(byteslice) // baitų fragmentas į eilutę
    backToString = string(rs)         // rune fragmentas į eilutę
    
  • strings modulis: Pateikia daugybę naudingų funkcijų:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • strconv modulis: Eilutės konvertavimas į kitus duomenų tipus (skaičius, loginę reikšmę) ir atvirkščiai.

    i, err := strconv.Atoi("123") // eilutė į int
    s := strconv.Itoa(456)        // int į eilutę
    
  • Nepakeičiamumas: Bet kokios operacijos, kurios atrodo kaip eilutės keitimas (pvz., sujungimas), iš tikrųjų sukuria naują eilutę. Tai svarbu atsižvelgti į našumą dažnų pakeitimų metu. Tokiu atveju geriau naudoti []byte arba strings.Builder.