Estoy tratando de leer una línea completa de la consola (incluidos los espacios en blanco) y luego procesarla. Usando bufio.ReadString, el carácter de nueva línea se lee junto con la entrada, así que se me ocurrió el siguiente código para recortar el carácter de nueva línea:
input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
¿Hay alguna forma más idiomática de hacer esto? Es decir, ¿existe ya una biblioteca que se encargue del byte nulo final al extraer subcadenas por usted?
(Sí, sé que ya hay una forma de leer una línea sin el carácter de nueva línea en ir readline -> cadena, pero estoy buscando más una manipulación elegante de cadenas).
s = s[:len(s)-1]
bastará.Las cadenas de Go no tienen terminación nula, y para eliminar el último carácter de una cadena, simplemente puede hacer:
fuente
Para evitar un pánico en una entrada de longitud cero, envuelva la operación de truncar en un if
fuente
Este es el sencillo para realizar subcadenas en Go
fuente
ADVERTENCIA: operar solo con cadenas solo funcionará con ASCII y contará incorrectamente cuando la entrada sea un carácter codificado no ASCII UTF-8, y probablemente incluso corromperá los caracteres ya que corta caracteres multibyte en la mitad de la secuencia.
Aquí hay una versión compatible con UTF-8:
fuente
Para obtener subcadena
encontrar la posición de "sp"
cortar cadena con arreglo lógico
https://play.golang.org/p/0Redd_qiZM
fuente
8 años después me topé con esta joya y, sin embargo, no creo que la pregunta original de OP haya sido realmente respondida:
Si bien el
bufio.Reader
tipo admite unReadLine()
método que elimina\r\n
y\n
está destinado a ser una función de bajo nivel que es incómoda de usar porque son necesarias comprobaciones repetidas.En mi opinión, una forma idiomática de eliminar los espacios en blanco es usar la biblioteca de cadenas de Golang :
Vea este ejemplo en acción en el patio de juegos de Golang: https://play.golang.org/p/HrOWH0kl3Ww
fuente