Estou tentando ler uma linha inteira do console (incluindo os espaços em branco) e processá-la. Usando bufio.ReadString, o caractere de nova linha é lido junto com a entrada, então eu vim com o seguinte código para cortar o caractere de nova linha:
input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
Existe uma maneira mais idiomática de fazer isso? Ou seja, já existe uma biblioteca que cuida do byte nulo final ao extrair substrings para você?
(Sim, eu sei que já existe uma maneira de ler uma linha sem o caractere de nova linha em go readline -> string, mas estou procurando mais por manipulação de string elegante.)
s = s[:len(s)-1]
basta.Strings Go não têm terminação nula e, para remover o último caractere de uma string, você pode simplesmente fazer:
fonte
Para evitar o pânico em uma entrada de comprimento zero, envolva a operação de truncamento em um if
fonte
Este é o método simples de executar substring no Go
fonte
AVISO: operar apenas em strings funcionará apenas com ASCII e contará incorretamente quando a entrada for um caractere não codificado em ASCII UTF-8, e provavelmente até corromperá caracteres, pois corta caracteres multibyte no meio da sequência.
Esta é uma versão compatível com UTF-8:
fonte
Para obter substring
encontre a posição de "sp"
string cortada com array lógico
https://play.golang.org/p/0Redd_qiZM
fonte
8 anos depois, descobri esta joia, mas não acredito que a pergunta original da OP tenha sido realmente respondida:
Enquanto o
bufio.Reader
tipo suporta umReadLine()
método que remove\r\n
e\n
é concebido como uma função de baixo nível, que é difícil de usar porque verificações repetidas são necessárias.IMO, uma forma idiomática de remover espaços em branco é usar a biblioteca de strings de Golang :
Veja este exemplo em ação no playground Golang: https://play.golang.org/p/HrOWH0kl3Ww
fonte