You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:11:14