Runas frente a bytes
Comprenda el funcionamiento interno de las cadenas de Go
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
lencuenta 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);rangeproduce estos valores.- Use
[]runeal 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.
bytees un byte sin procesar;lencuenta bytes.runees un punto de código Unicode;rangelos 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)))
}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
- Runas frente a bytes
- Funciones del paquete strings
- strings.Builder
- Unicode y utf8