Go Academy · Lección

Runas frente a bytes

Comprenda el funcionamiento interno de las cadenas de Go

Lección 1 de 413 pasos

Runas frente a bytes es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

¿Qué es un string de Go?

En Go, un string es una secuencia inmutable de bytes. Normalmente, los bytes contienen texto codificado en UTF-8, pero Go no lo impone.

  • No puede modificar un string directamente.
  • Su len cuenta bytes, no caracteres.
package main

import "fmt"

func main() {
    s := "Go"
    fmt.Println(s)
    fmt.Println(len(s))
}

Los bytes entre bastidores

Al indexar un string con s[i] se obtiene un único byte (de tipo byte, un alias de uint8).

En el texto ASCII básico, cada carácter ocupa exactamente un byte.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(s[0])
    fmt.Println(s[1])
    fmt.Println(s[2])
}

Un byte es un número

Como un byte no es más que un número, imprimir s[0] muestra 65 (el código ASCII de A), no la letra.

Para ver el carácter, convierta el byte de nuevo en un string.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(string(s[0]))
}

¿Qué es un rune?

Un rune es un alias de int32 y representa un único punto de código Unicode.

  • Un rune puede ocupar varios bytes cuando se codifica como UTF-8.
  • Use runes cuando le importen los caracteres, no los bytes sin procesar.
package main

import "fmt"

func main() {
    var r rune = 'A'
    fmt.Println(r)
    fmt.Println(string(r))
}

Caracteres multibyte

Los caracteres que no son ASCII ocupan más de un byte en UTF-8. Un string como "héllo" tiene más bytes que letras.

Observe que len informa del número de bytes, que es mayor que la longitud visible.

package main

import "fmt"

func main() {
    s := "héllo"
    fmt.Println(len(s))
}

Recorrer un string

Un bucle for range sobre un string decodifica UTF-8 automáticamente. Cada iteración produce:

  • el índice de byte donde comienza el rune;
  • el rune en sí.
package main

import "fmt"

func main() {
    for i, r := range "héllo" {
        fmt.Println(i, string(r))
    }
}

Contar caracteres correctamente

Para contar caracteres en lugar de bytes, convierta el string en un []rune y obtenga su longitud.

Esto proporciona el número de puntos de código.

package main

import "fmt"

func main() {
    s := "héllo"
    runes := []rune(s)
    fmt.Println(len(runes))
}

Indexar por rune

Una vez que tenga un []rune, puede indexarlo para obtener de forma fiable el carácter número N, incluso con texto multibyte.

package main

import "fmt"

func main() {
    runes := []rune("héllo")
    fmt.Println(string(runes[1]))
}

De strings a bytes y de vuelta

Puede convertir libremente entre un string y un []byte.

  • []byte(s) proporciona los bytes sin procesar.
  • string(b) reconstruye el texto.
package main

import "fmt"

func main() {
    b := []byte("Go")
    fmt.Println(b)
    fmt.Println(string(b))
}

Construir un string a partir de runes

Una slice de runes se convierte de nuevo en un string de la misma manera. Resulta útil después de editar caracteres individualmente.

package main

import "fmt"

func main() {
    runes := []rune{'G', 'o', '!'}
    fmt.Println(string(runes))
}

Resumen: bytes frente a runes

Modelo mental rápido:

  • byte = un byte sin procesar (uint8); len(s) cuenta estos bytes.
  • rune = un punto de código Unicode (int32); range produce estos valores.
  • Use []rune al contar o indexar caracteres.
package main

import "fmt"

func main() {
    s := "café"
    fmt.Println(len(s))
    fmt.Println(len([]rune(s)))
}

Comprobación rápida

Compruebe lo que ha aprendido sobre runes y bytes.

Repaso: runes frente a bytes

Ha aprendido que los strings de Go son secuencias inmutables de bytes, normalmente codificadas en UTF-8.

  • byte es un byte sin procesar; len cuenta bytes.
  • rune es un punto de código Unicode; range los decodifica.
  • Convierta con []byte(s) y []rune(s) para trabajar en el nivel adecuado.
package main

import "fmt"

func main() {
    s := "Go語"
    fmt.Println("bytes:", len(s))
    fmt.Println("runes:", len([]rune(s)))
}
Gratis para empezar

Aprende Go con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «Runas frente a bytes» es gratis?

Sí — el texto completo de «Runas frente a bytes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Runas frente a bytes»?

Comprenda el funcionamiento interno de las cadenas de Go Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Runas frente a bytes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Runas frente a bytes
  2. Funciones del paquete strings
  3. strings.Builder
  4. Unicode y utf8
← Volver a Go Academy