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

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

GO crifan 8139浏览 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的话:

1
2
3
4
5
6
7
8
9
10
11
12
13
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.最后是如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
}

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

1
2
3
4
5
6
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语言中,获得输入的字符串,且支持多次获取输入的话,用如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.201 seconds, using 22.16MB memory