我如何在GoLang中接受用户输入(fmt.scan)

时间:2019-03-16 03:23:28

标签: go gofmt

我无法使用fmt.scan()

golang 中接受用户的输入

请帮助我。

package main

import "fmt"

func main() {
    fmt.Print("Enter text: ")
    var input string
    e, _ := fmt.Scanln(&input)
    fmt.Println(input)
    fmt.Println(e)
}

image of code

在停止调试器后: image of code

在代码中添加错误,什么都没发生

func main() {
    fmt.Print("Enter text: ")
    var input string
    e, err := fmt.Scanln(&input)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Println(input)
    fmt.Println(e)
}

Image after add err in my Code . What is "not available" in Next line (after my Input value : "51213")

3 个答案:

答案 0 :(得分:1)

您的代码没有问题。如果使用go build构建代码并直接在终端中运行二进制文件,则会看到代码运行。

您遇到的问题是因为有Delve和vscode调试控制台。 vscode调试控制台不支持从stdin读取。您可以检查以下问题:Cannot debug programs which read from STDIN以获得详细信息。

答案 1 :(得分:0)

不需要'e'。将其替换为下划线并删除打印语句。


import (
    "fmt"
    "os"
)
func main() {
    fmt.Print("Enter text: \n")
    var input string
    _, err := fmt.Scanln(&input)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Println(input)
}

答案 2 :(得分:0)

为了记录。如果你想输入一个数值,fmt.Scan 将值作为字符串存储在一个变量中,如果你想用它执行任何数学运算,你需要将它转换为 int 或 float。一个简单的例子:

func main() {
    fmt.Println("Type your age: ")

    var input string
    _, err := fmt.Scanln(&input)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Printf("%T\n", input)        // outputs string
    inputInt,_ := strconv.Atoi(input)   
    fmt.Printf("%T\n", inputInt)     // outputs int
    fmt.Printf("You were born in %d\n", 2021-inputInt)
}

我花了一段时间才弄明白,希望能帮到你!