Es fácil confundirse acerca de cómo funciona una iteración de string en Go. En todo caso tenemos hay que recorrer sobre las diferentes "runas" (carácter de escritura) de una cadena de texto.
Oops! This image does not follow our content guidelines. To continue publishing, please remove it or upload a different image.
En el ejemplo se dispone de un carácter especial o compuesto. En salida de terminal por el sistema de codificación de conjunto de caracteres puede dar como resultado una representación o escritura diferente.
len devuelve una cuenta de 6 caracteres, mientras que s contiene solo 5 runas visibles. s es tratado como una cadena UTF-8. Mientras tanto, el carácter especial ê para su representación no está codificado en un solo byte, un string se traduce o tiene equivalencia a un array de byte.
¿Qué pasa si queremos obtener el número de runas (caracteres visibles) en una cadena, no el número de bytes?
1. Depende de la codificación. Por ejemplo asignando un literal de cadena a una variable, es una cadena UTF-8 propia en Go. Se puede usar el paquete unicode/utf8:
Oops! This image does not follow our content guidelines. To continue publishing, please remove it or upload a different image.
2. Otra idea es convertir la cadena en un slice de runas y recorrerla:
Oops! This image does not follow our content guidelines. To continue publishing, please remove it or upload a different image.