Sobes.tech
Junior

Como trabalhar com strings na linguagem Go?

sobes.tech IA

Resposta da IA

As cadeias em Go são sequências imutáveis de bytes. Podem representar tanto texto UTF-8 quanto dados binários arbitrários.

Principais formas de trabalhar:

  • Declaração e inicialização:

    var s1 string           // Cadeia vazia
    s2 := "olá"             // Inicialização com literal de cadeia
    s3 := `multilinha
    cadeia`                // Literal de cadeia bruto
    
  • Comprimento da cadeia:

    len(s2) // Comprimento em bytes. Para "olá" será 3.
    
  • Acesso aos bytes:

    b := s2[0] // Obter o byte no índice. Retorna 'o' (em UTF-8).
    

    O acesso direto aos bytes não garante obter um carácter UTF-8 completo.

  • Acesso às runas (caracteres UTF-8): As cadeias podem ser iteradas por runas:

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

    Comprimento em runas:

    utf8.RuneCountInString(s2) // Comprimento em runas. Para "olá" será 3.
    
  • Concatenação de cadeias:

    str1 := "hello"
    str2 := " world"
    result := str1 + str2 // Concatenação com +
    

    Para concatenação eficiente de muitas cadeias, use strings.Builder.

    var sb strings.Builder
    sb.WriteString("hello")
    sb.WriteString(" ")
    sb.WriteString("world")
    result := sb.String() // Obter a cadeia resultante
    
  • Conversão entre cadeias e slices de bytes/runes:

    byteslice := []byte(s2)   // Cadeia para slice de bytes
    rs := []rune(s2)          // Cadeia para slice de runas
    
    backToString := string(byteslice) // Slice de bytes para cadeia
    backToString = string(rs)         // Slice de runas para cadeia
    
  • Pacote strings: Oferece muitas funções úteis:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Pacote strconv: Para converter cadeias em outros tipos de dados (números, booleanos) e vice-versa.

    i, err := strconv.Atoi("123") // Cadeia para int
    s := strconv.Itoa(456)        // int para cadeia
    
  • Imutabilidade: Quaisquer operações que parecem modificar uma cadeia (por exemplo, concatenação) na verdade criam uma nova cadeia. Isso é importante para o desempenho em alterações frequentes. Nesses casos, é melhor usar []byte ou strings.Builder.