最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】go语言中获得控制台输入的字符串

GO crifan 7738浏览 0评论

【背景】

折腾:

【记录】用go语言实现模拟登陆百度

期间,需要去获得输入的百度的用户名和密码,所以需要去搞懂:

go语言中,如何获得console,此处是windows的cmd的输入。

【折腾过程】

1.参考:

Golang function similar to getchar

Getting standard input in golang

去试试。

 

2.期间还出错了:

【已解决】go语言中赋值出错:no new variables on left side of :=

3.但是去用Scanf的话:

        strBaiduUsername := ""
        strBaiduPassword := ""
        // stdinReader := bufio.NewReader(os.Stdin)
        // inputBytes, _ := stdinReader.ReadString('\n')
        // fmt.Printf("Input Char Is : %v", string([]byte(input)[0]))
        _, err1 := fmt.Scanf("%s", &strBaiduUsername)
        if nil == err1 {
            gLogger.Info("strBaiduUsername=%s", strBaiduUsername)
        }
        _, err2 := fmt.Scanf("%s", &strBaiduPassword)
        if nil == err2 {
            gLogger.Info("strBaiduPassword=%s", strBaiduPassword)
        }

会导致:

只能获得一次的输入,就退出了:

use Scanf only can got once input

 

4.最后是如下代码:

        strBaiduUsername := ""
        strBaiduPassword := ""
        // stdinReader := bufio.NewReader(os.Stdin)
        // inputBytes, _ := stdinReader.ReadString('\n')
        // fmt.Printf("Input Char Is : %v", string([]byte(input)[0]))
        //_, err1 := fmt.Scanf("%s", &strBaiduUsername)
        _, err1 := fmt.Scanln(&strBaiduUsername)
        if nil == err1 {
            gLogger.Info("strBaiduUsername=%s", strBaiduUsername)
        }
        //_, err2 := fmt.Scanf("%s", &strBaiduPassword)
        _, err2 := fmt.Scanln(&strBaiduPassword)
        if nil == err2 {
            gLogger.Info("strBaiduPassword=%s", strBaiduPassword)
        }

可以实现我们要的,支持多次输入且获得对应的字符串的:

name
[09/21/13 16:41:08] [INFO] strBaiduUsername=name
passwd
[09/21/13 16:41:11] [INFO] strBaiduPassword=passwd

E:\Dev_Root\go\src\EmulateLoginBaidu>

如图:

can got two time input string

 

【总结】

go语言中,获得输入的字符串,且支持多次获取输入的话,用如下代码:

        strBaiduUsername := ""
        strBaiduPassword := ""
        // stdinReader := bufio.NewReader(os.Stdin)
        // inputBytes, _ := stdinReader.ReadString('\n')
        // fmt.Printf("Input Char Is : %v", string([]byte(input)[0]))
        //_, err1 := fmt.Scanf("%s", &strBaiduUsername)
        _, err1 := fmt.Scanln(&strBaiduUsername)
        if nil == err1 {
            gLogger.Info("strBaiduUsername=%s", strBaiduUsername)
        }
        //_, err2 := fmt.Scanf("%s", &strBaiduPassword)
        _, err2 := fmt.Scanln(&strBaiduPassword)
        if nil == err2 {
            gLogger.Info("strBaiduPassword=%s", strBaiduPassword)
        }

即可。

转载请注明:在路上 » 【已解决】go语言中获得控制台输入的字符串

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.166 seconds, using 22.10MB memory