La guía o código que encontrarás en este post es la resolución más rápida y válida que encontramos a esta inquietud o dilema.
Solución:
Los literales de runas son solo valores enteros de 32 bits (sin embargo, son constantes sin tipo, por lo que su tipo puede cambiar). Representan puntos de código Unicode. Por ejemplo, la runa literal 'a'
es en realidad el numero 97
.
Por lo tanto, su programa es más o menos equivalente a:
package main
import "fmt"
func SwapRune(r rune) rune
switch
case 97 <= r && r <= 122:
return r - 32
case 65 <= r && r <= 90:
return r + 32
default:
return r
func main()
fmt.Println(SwapRune('a'))
Debería ser obvio, si mirara el mapeo Unicode, que es idéntico a ASCII en ese rango. Además, 32 es, de hecho, el desplazamiento entre el punto de código en mayúsculas y minúsculas del carácter. Entonces al agregar 32
a 'A'
usted obtiene 'a'
y viceversa.
De las notas de la versión de Go lang: http://golang.org/doc/go1#rune
La runa es un tipo. Ocupa 32 bits y está destinado a representar un punto de código Unicode. Como analogía, el conjunto de caracteres ingleses codificados en 'ASCII' tiene 128 puntos de código. Por lo tanto, puede caber dentro de un byte (8 bits). A partir de esta suposición (errónea), C trató los caracteres como 'bytes' char
y 'cadenas' como una 'secuencia de caracteres' char*
.
Pero adivina que. Hay muchos otros símbolos inventados por humanos además de los símbolos 'abcde..'. Y hay tantos que necesitamos 32 bits para codificarlos.
En golang entonces un string
es una secuencia de bytes
. Sin embargo, dado que múltiples bytes pueden representar un punto de código de runa, un string El valor también puede contener runas. Por lo tanto, se puede convertir en un []rune
o viceversa.
El paquete Unicode http://golang.org/pkg/unicode/ puede dar una idea de la riqueza del desafío.
He tratado de mantener mi lenguaje simple para que un profano entienda rune
.
Una runa es un carácter. Eso es todo.
Es un solo personaje. Es un carácter de cualquier alfabeto de cualquier idioma de cualquier parte del mundo.
Conseguir un string usamos
double-quotes ""
O
back-ticks ``
A string es diferente a una runa. En las runas usamos
single-quotes ''
Ahora una runa es también un alias para int32
...¿Cómo?
La runa de la razón es un alias para int32
es porque vemos que con esquemas de codificación como el siguiente
cada carácter se asigna a algún número, por lo que es el número que estamos almacenando. Por ejemplo, a mapas a 97 y cuando almacenamos ese número, es solo el número y así es como rune es un alias para int32. Pero no es un número cualquiera. Es un número con 32 'ceros y unos' o '4' bytes. (Nota: UTF-8 es un esquema de codificación de 4 bytes)
¿Cómo se relacionan las runas con las cuerdas?
A string es una colección de runas. En el siguiente código:
package main
import (
"fmt"
)
func main()
fmt.Println([]byte("Hello"))
Intentamos convertir un string a un flujo de bytes. La salida es:
[72 101 108 108 111]
Podemos ver que cada uno de los bytes que componen ese string es una runa.
valoraciones y reseñas
Si crees que te ha resultado provechoso este post, agradeceríamos que lo compartas con otros entusiastas de la programación así contrubuyes a difundir nuestro contenido.