reader.ReadString não remove o delimitador inicial
Em um esforço para criar um programa que cumprimente usuários chamados Alice ou Bob, um desenvolvedor encontrou um problema em que até nomes legítimos desencadeavam uma resposta indesejada. O programa negou incorretamente a entrada de Alice e Bob.
O problema
O problema decorre do uso de reader.ReadString('\n') no programa . Esta função recupera caracteres até que um caractere de nova linha seja encontrado. No entanto, ele não remove automaticamente o delimitador da string retornada, levando à inclusão de uma nova linha adicional na entrada do usuário.
Solução
Para resolver esse problema , existem duas abordagens possíveis:
1. Corte a nova linha
Use a função strings.TrimSpace para remover qualquer espaço em branco à esquerda ou à direita da string de entrada antes de avaliá-la. Isso remove efetivamente o caractere de nova linha que causou o problema.
if aliceOrBob(strings.TrimSpace(text)) { fmt.Printf("Hello, ", text) }
2. Use ReadLine em vez de ReadString
Alternativamente, a função ReadLine pode ser usada em vez de ReadString. ReadLine recupera uma linha de texto sem incluir o caractere de nova linha na string retornada.
text, _, _ := reader.ReadLine() if aliceOrBob(string(text)) { fmt.Printf("Hello, ", text) }
Explicação
O motivo para usar string(text) com ReadLine é que ReadLine retorna uma fatia de bytes, enquanto aliceOrBob requer um argumento de string.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3