Sobes.tech
Junior

¿Cómo se pueden trabajar con cadenas en el lenguaje Go?

sobes.tech AI

Respuesta de la IA

Las cadenas en Go son secuencias inmutables de bytes. Pueden representar tanto texto UTF-8 como datos binarios arbitrarios.

Formas principales de trabajar:

  • Declaración e inicialización:

    var s1 string           // Cadena vacía
    s2 := "hola"            // Inicialización con literal de cadena
    s3 := `multilínea
    cadena`                 // Literal de cadena sin procesar
    
  • Longitud de la cadena:

    len(s2) // Longitud en bytes. Para "hola" será 4.
    
  • Acceso a bytes:

    b := s2[0] // Obtiene el byte en el índice. Retorna 'h' (en UTF-8).
    

    El acceso directo a bytes no garantiza obtener un carácter UTF-8 completo.

  • Acceso a runas (caracteres UTF-8): Las cadenas se pueden iterar por runas:

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

    Longitud en runas:

    utf8.RuneCountInString(s2) // Longitud en runas. Para "hola" será 4.
    
  • Concatenación de cadenas:

    str1 := "hello"
    str2 := " world"
    result := str1 + str2 // Concatenación con +
    

    Para concatenaciones eficientes de muchas cadenas, usa strings.Builder.

    var sb strings.Builder
    sb.WriteString("hello")
    sb.WriteString(" ")
    sb.WriteString("world")
    result := sb.String() // Obtiene la cadena resultante
    
  • Conversión entre cadenas y slices de bytes/runes:

    byteslice := []byte(s2)   // Cadena a slice de bytes
    rs := []rune(s2)          // Cadena a slice de runas
    
    backToString := string(byteslice) // Slice de bytes a cadena
    backToString = string(rs)         // Slice de runas a cadena
    
  • Paquete strings: Ofrece muchas funciones útiles:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Paquete strconv: Para convertir cadenas a otros tipos de datos (números, booleanos) y viceversa.

    i, err := strconv.Atoi("123") // Cadena a int
    s := strconv.Itoa(456)        // int a cadena
    
  • Inmutabilidad: Cualquier operación que parezca modificar una cadena (como concatenar) en realidad crea una nueva cadena. Esto es importante para el rendimiento en cambios frecuentes. En tales casos, es mejor usar []byte o strings.Builder.