Go fmt包中Scan获取标准输入方式

 更新时间:2025年07月22日 11:11:00   作者:富士康质检员张全蛋  
Go的fmt.Scan、Scanf、Scanln用于输入处理,Scan持续读取至换行,Scanln按行读取,Scanf按格式解析参数,格式字符串中的空格和逗号影响参数分割,且输入格式需与指定一致

Go fmt包下有三个函数

可以在程序运行过程中获取用户输入。

  • fmt.Scan:获取输入
  • fmt.Scanf:获取输入,但是可以指定格式,go会根据格式解析参数
  • fmt.Scanln:获取一行的输入,只会获取到一行。

示例1

我们需要和gates和jobs问个好,代码:

fmt.Println("Please enter your names")
var a1, a2 string
fmt.Scan(&a1, &a2)
fmt.Println("hello,", a1, "and", a2)

运行后,在窗口中输入:gates jobs

输出:

hello, gates and jobs

可以看出,go把输入的参数按空格分开后,分别赋值给了a1和a2。

整体运行结果(第二行是运行时用户输入的):

Please enter your names
gates jobs
hello, gates and jobs

如果我们输入时换行输入:

Please enter your names
gates
jobs
hello, gates and jobs

可以看出gates和jobs中间是敲了回车的,这是Scan和Scanln的区别。Scan回车还可以继续接受,Scanln只要收到回车就不会继续接收输入了

示例2

Scanln和Scan非常类似,只是Scanln只会接受一个回车,收到回车就扫描结束了。 

var c1, c2 string
fmt.Scanln(&c1, &c2)
fmt.Println("hello,", c1, "and", c2)

运行结果:

Please enter your names
gates jobs
hello, gates and jobs

如果换行输入,结果是:

Please enter your names
gates
hello, gates and

因为输入了gates后,回车,结果就打印出来了,没机会再输入jobs了,和Scan函数不一样。 

示例3

fmt.Println("Please enter your names")
var b1, b2 string
fmt.Scanf("%s , %s", &b1, &b2)
fmt.Println("hello,", b1, "and", b2)

运行结果:

Please enter your names
gates , jobs
hello, gates and jobs

上面的示例,需要注意两点:

1、Scanf中间有一个逗号,但逗号和%s间有空格,因为Scanf是用空格来区分不同的参数的。

2、输入的参数gates , jobs格式与Scanf中指定的fmt要一致。

3、中间的逗号,Scanf会自动格式匹配不会添加到变量中 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • golang中连接mysql数据库

    golang中连接mysql数据库

    这篇文章主要介绍了golang中连接mysql数据库的步骤,帮助大家更好的理解和学习go语言,感兴趣的朋友可以了解下
    2020-12-12
  • Golang设计模式之原型模式详细讲解

    Golang设计模式之原型模式详细讲解

    如果一个类的有非常多的属性,层级还很深。每次构造起来,不管是直接构造还是用建造者模式,都要对太多属性进行复制,那么有没有一种好的方式让我们创建太的时候使用体验更好一点呢? 今天的文章里就给大家介绍一种设计模式,来解决这个问题
    2023-01-01
  • go-zero读取请求体出现EOF错误的解决方法

    go-zero读取请求体出现EOF错误的解决方法

    这篇文章主要为大家详细介绍了go-zero读取请求体出现EOF错误时如何解决,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • Gin框架中异步任务的实现

    Gin框架中异步任务的实现

    Gin框架中的异步任务处理是指在Web应用中以非阻塞的方式处理耗时操作或后台任务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 使用Go实现健壮的内存型缓存的方法

    使用Go实现健壮的内存型缓存的方法

    这篇文章主要介绍了使用Go实现健壮的内存型缓存,本文比较了字节缓存和结构体缓存的优劣势,介绍了缓存穿透、缓存错误、缓存预热、缓存传输、故障转移、缓存淘汰等问题,并对一些常见的缓存库进行了基准测试,需要的朋友可以参考下
    2022-05-05
  • Go语言标准输入输出库的基本使用教程

    Go语言标准输入输出库的基本使用教程

    输入输出在任何一门语言中都必须提供的一个功能,下面这篇文章主要给大家介绍了关于Go语言标准输入输出库的基本使用,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • 详解Go channel管道的运行原理

    详解Go channel管道的运行原理

    Go推荐通过通信来共享内存,而channel就实现了这一理念。那channel是怎么运行的呢?本文将带你搞懂Go channel管道的运行原理,感兴趣的同学可以参考一下
    2023-05-05
  • Golang 流水线设计模式实践示例详解

    Golang 流水线设计模式实践示例详解

    这篇文章主要为大家介绍了Golang 流水线设计模式实践示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Golang 使用http Client下载文件的实现方法

    Golang 使用http Client下载文件的实现方法

    今天小编就为大家分享一篇Golang 使用http Client下载文件的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Golang标准库syscall详解(什么是系统调用)

    Golang标准库syscall详解(什么是系统调用)

    最近在研究go语言,发现go语言系统调用源码只有调用函数的定义,今天通过本文给大家分享Golang标准库syscall详解及什么是系统调用,感兴趣的朋友一起看看吧
    2021-05-05

最新评论