Sobes.tech
Junior

Kā strādāt ar virkni Go valodā?

sobes.tech AI

Atbilde no AI

Go valodā rindas ir nemainīgas secības baitu. Tās var attēlot gan UTF-8 tekstu, gan jebkādiem bināriem datiem.

Galvenie darba veidi:

  • Deklarācija un inicializācija:

    var s1 string           // Tukša rinda
    s2 := "sveiki"            // Inicializācija ar literālu
    s3 := `daudzrindaina
    rinda`             // Neapstrādāts literāls
    
  • Rindas garums:

    len(s2) // baitu skaits. "sveiki" gadījumā tas būs 6.
    
  • Piekļuve baitiem:

    b := s2[0] // Baita iegūšana pēc indeksa. Atgriezīs 's' (UTF-8).)
    

    Tieša piekļuve baitiem nenodrošina simbolu UTF-8.

  • Piekļuve rúnām (UTF-8 simboliem): Rindas var iterēt pa rúnām:

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

    Rindu garums rúnās:

    utf8.RuneCountInString(s2) // Garums rúnās. "sveiki" gadījumā tas būs 6.
    
  • Rindu savienošanas:

    str1 := "sveiki"
    str2 := " pasaulē"
    result := str1 + str2 // Savieno ar operatoru +
    

    Efektīvai lielu rindu savienošanai izmantojiet strings.Builder:

    var sb strings.Builder
    sb.WriteString("sveiki")
    sb.WriteString(" ")
    sb.WriteString("pasaulē")
    result := sb.String() // Rezultāta rinda
    
  • Rindu un baitu/rúnu griezumu pārveidošana:

    byteslice := []byte(s2)   // Rinda uz baitu griezumu
    rs := []rune(s2)          // Rinda uz rúnu griezumu
    
    backToString := string(byteslice) // Baitu griezums uz rindu
    backToString = string(rs)         // Rúnu griezums uz rindu
    
  • strings modulis: Nodrošina daudz noderīgu funkciju:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • strconv modulis: Rindu pārveidošana uz citām datu tipiem (skaitļiem, loģiskām vērtībām) un atpakaļ.

    i, err := strconv.Atoi("123") // Rinda uz int
    s := strconv.Itoa(456)        // Int uz rindu
    
  • Nemainīgums: Jebkuras operācijas, kas izskatās kā rindas maiņa (piemēram, savienošana), patiesībā rada jaunu rindu. Tas ir svarīgi ņemt vērā veiktspēnes nolūkos biežu izmaiņu gadījumā. Šādos gadījumos labāk izmantot []byte vai strings.Builder.