strings golang escape characters string loops go rune

string - golang - ¿Cómo puedo recorrer una secuencia por runas en Go?



string to uppercase golang (3)

Para reflejar un ejemplo dado en golang.org , Go te permite convertir fácilmente una cadena en una porción de runas y luego iterar sobre eso, como querías originalmente:

runes := []rune("Hello, 世界") for i := 0; i < len(runes) ; i++ { fmt.Printf("Rune %v is ''%c''/n", i, runes[i]) }

Por supuesto, también podríamos usar un operador de rango como en los otros ejemplos aquí, pero esto sigue más de cerca su sintaxis original. En cualquier caso, esto dará como resultado:

Rune 0 is ''H'' Rune 1 is ''e'' Rune 2 is ''l'' Rune 3 is ''l'' Rune 4 is ''o'' Rune 5 is '','' Rune 6 is '' '' Rune 7 is ''世'' Rune 8 is ''界''

Tenga en cuenta que dado que el tipo de rune es un alias para int32 , debemos usar %c lugar del %v habitual en la declaración Printf , o veremos la representación entera del punto de código Unicode (consulte Un tour de Go ).

Quería esto:

for i := 0; i < len(str); i++ { dosomethingwithrune(str[i]) // takes a rune }

Pero resulta que str[i] tiene tipo byte ( uint8 ) en lugar de rune .

¿Cómo puedo iterar sobre la cadena por runas en lugar de bytes?


Por ejemplo:

package main import "fmt" func main() { for i, rune := range "Hello, 世界" { fmt.Printf("%d: %c/n", i, rune) } }

Playground

Salida:

0: H 1: e 2: l 3: l 4: o 5: , 6: 7: 世 10: 界


Vea este ejemplo de Effective Go :

for pos, char := range "日本語" { fmt.Printf("character %c starts at byte position %d/n", char, pos) }

Esto imprime:

character 日 starts at byte position 0 character 本 starts at byte position 3 character 語 starts at byte position 6

Para las cadenas, el rango hace más trabajo para usted, dividiendo puntos de código Unicode individuales al analizar el UTF-8.