Rune en Go

Jay Singh 30 enero 2023
  1. Ejemplo usando Rune en Go
  2. Usar rune con barra invertida \ en Go
  3. Compara byte() y rune() en Go
Rune en Go

En Go, una runa es un alias para el tipo de datos int32, que representa puntos de código Unicode. Se refiere al valor numérico asignado a un carácter Unicode.

Hace algunos años, utilizamos el conjunto de caracteres ASCII, que emplea siete bits para representar ciento ochenta y dos caracteres, incluidas letras mayúsculas, valores numéricos, etc. En contraste, el conjunto de caracteres ASCII demostró ser incapaz de manejar la gran cantidad de caracteres del mundo. de lenguajes y símbolos.

La codificación de caracteres Unicode se creó para superar este problema. Es un superconjunto de codificación de caracteres ASCII, con un máximo de 1114112 puntos de código Unicode.

Veamos algunos ejemplos para tener una mejor comprensión.

Ejemplo usando Rune en Go

package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

func main() {
    r := 'b'

    fmt.Printf("Size: %d\n", unsafe.Sizeof(r))
    fmt.Printf("Type: %s\n", reflect.TypeOf(r))
    fmt.Printf("Unicode CodePoint: %U\n", r)
    fmt.Printf("Character: %c\n", r)

    s := "Jay Singh"

    fmt.Printf("%U\n", []rune(s))
    fmt.Println([]rune(s))
}

Producción :

Size: 4
Type: int32
Unicode CodePoint: U+0062
Character: b
[U+004A U+0061 U+0079 U+0020 U+0053 U+0069 U+006E U+0067 U+0068]
[74 97 121 32 83 105 110 103 104]

Usar rune con barra invertida \ en Go

Todas las secuencias que comienzan con una barra invertida están prohibidas en los literales de rune.

package main

import (
    "fmt"
    "reflect"
)

func main() {

    rune1 := 'J'
    rune2 := 'c'
    rune3 := '\\'

    fmt.Printf("Rune 1: %c; Unicode: %U; Type: %s", rune1,
        rune1, reflect.TypeOf(rune1))

    fmt.Printf("\nRune 2: %c; Unicode: %U; Type: %s", rune2,
        rune2, reflect.TypeOf(rune2))

    fmt.Printf("\nRune 3: Unicode: %U; Type: %s", rune3,
        rune3, reflect.TypeOf(rune3))
}

Producción :

Rune 1: J; Unicode: U+004A; Type: int32
Rune 2: c; Unicode: U+0063; Type: int32
Rune 3: Unicode: U+005C; Type: %!s(int32=92)%!(EXTRA *reflect.rtype=int32)

Compara byte() y rune() en Go

Vamos a generar la matriz de bytes y la runa de una cadena que contiene caracteres que no son ASCII en este ejemplo. El valor especial de la runa del carácter Unicode es 214; sin embargo, la codificación requiere dos bytes.

package main

import (
    "fmt"
)

func main() {
    s := "GÖ"

    s_rune := []rune(s)
    s_byte := []byte(s)

    fmt.Println(s_rune)
    fmt.Println(s_byte)
}

Producción :

[71 214]
[71 195 150]