Go 检查用户输入字符串

Go 检查用户输入字符串,go,Go,我是刚来戈兰的新人,遇到了这种情况的问题: 即使用户的输入是“1”,它也不会输入if语句 package main import ( "bufio" "fmt" "os" "strconv" "math" "strings" ) func prompt(toprint string) string{ if(toprint == ""){ toprint = "Enter text :"; } reader

我是刚来戈兰的新人,遇到了这种情况的问题: 即使用户的输入是“1”,它也不会输入if语句

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "math"
    "strings"
)

func prompt(toprint string) string{
    if(toprint == ""){
        toprint = "Enter text :";
    }
    reader := bufio.NewReader(os.Stdin);
    fmt.Println(toprint);
    text, _ := reader.ReadString('\n');
    return text;
}

func main() {
    choice := prompt("Please enter '1'");

    if(strings.Compare("1",choice)==0||choice=="1"){
        // D'ONT ENTER HERE EVEN WHEN choice=="1"
    }else{
        // Always go here
    }
}

感谢您的帮助。

这是因为
reader.ReadString
返回包括分隔符在内的所有文本,因此返回的字符串将是
1\n
而不仅仅是
1
。来自(我的重点):

ReadString
一直读取,直到输入中第一次出现
delim
,返回一个包含数据的字符串,直到并包括分隔符。如果
ReadString
在查找分隔符之前遇到错误,它将返回在错误之前读取的数据以及错误本身(通常是
io.EOF
)。ReadString返回
err!=nil
当且仅当返回的数据不以delim结尾时。对于简单的使用,
扫描仪
可能更方便

也许你想做什么

return strings.TrimSpace(text)

prompt()

的末尾,这是因为
reader.ReadString
返回包括分隔符在内的所有文本,因此返回的字符串将是
1\n
而不仅仅是
1
。来自(我的重点):

ReadString
一直读取,直到输入中第一次出现
delim
,返回一个包含数据的字符串,直到并包括分隔符。如果
ReadString
在查找分隔符之前遇到错误,它将返回在错误之前读取的数据以及错误本身(通常是
io.EOF
)。ReadString返回
err!=nil
当且仅当返回的数据不以delim结尾时。对于简单的使用,
扫描仪
可能更方便

也许你想做什么

return strings.TrimSpace(text)
提示符()的末尾

谢谢! 下面是返回正确输入的“prompt()”代码:

func prompt(toprint string) string{
    if(toprint == ""){
        toprint = "Enter text :";
    }
    reader := bufio.NewReader(os.Stdin);
    fmt.Println(toprint);
    text, _ := reader.ReadString('\n');
    return text[0:len(text)-2];
}
谢谢大家!! 下面是返回正确输入的“prompt()”代码:

func prompt(toprint string) string{
    if(toprint == ""){
        toprint = "Enter text :";
    }
    reader := bufio.NewReader(os.Stdin);
    fmt.Println(toprint);
    text, _ := reader.ReadString('\n');
    return text[0:len(text)-2];
}