Go语言键盘整行输入问题:fmt.Scanln无法获取含空格的完整内容
解决Go语言获取完整一行输入的问题
问题原因
fmt.Scanln(&command) 以空白字符(空格、换行等)作为输入分隔符,只能读取第一个空格前的内容,后续字符会被截断,这就是你遇到的问题。
替代方案
方案1:用bufio.NewReader实现类似Pythoninput()的效果
这是获取单行输入的常用方式:
package main import ( "bufio" "fmt" "os" ) func main() { fmt.Println("input : ") reader := bufio.NewReader(os.Stdin) // 读取到换行符为止,返回结果包含末尾的换行符 command, err := reader.ReadString('\n') if err != nil { fmt.Println("读取输入失败:", err) return } // 手动去掉末尾的换行符 command = command[:len(command)-1] fmt.Println("你输入的内容是:", command) }
方案2:用bufio.Scanner更简洁处理
如果不需要保留换行符,bufio.Scanner用起来更省心:
package main import ( "bufio" "fmt" "os" ) func main() { fmt.Println("input : ") scanner := bufio.NewScanner(os.Stdin) // 读取一行内容,成功则返回true if scanner.Scan() { command := scanner.Text() fmt.Println("你输入的内容是:", command) } // 检查读取过程是否出错 if err := scanner.Err(); err != nil { fmt.Println("读取输入失败:", err) return } }
补充说明
reader.ReadString('\n')返回的字符串带换行符,需要手动截断;scanner.Text()会自动剔除换行符,更适合大多数场景。- 要是需要处理多行输入或自定义分割规则,
bufio.Scanner还支持设置分割函数,灵活性更高。
内容的提问来源于stack exchange,提问作者Fre Over
相关产品推荐
相关产品推荐

