码迷,mamicode.com
首页 > 编程语言 > 详细

Go语言中的fmt.Scan使用说明

时间:2020-03-30 14:30:33      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:%s   interface   amp   new   read   获取   for   一个   var   

在go语言中如果想获取用户输入,会用到Scan方法。scan在go语言中有很多中,今天介绍一下他们的使用方法和不同点。

和print类似,scan也分为三大类:

  • Scan、Scanf和Scanln: 从标准输入os.Stdin读取文本(从终端获取数据)
  • Fscan、Fscanf、Fscanln: 从指定的io.Reader接口读取文本(通用)
  • Sscan、Sscanf、Sscanln: 从一个参数字符串读取文本(从字符串string获取数据)

Scan:

语法: func Scan(a ...interface{}) (n int, err error)
例:
func main() {
          var str string
          fmt.Printf("请输入内容:")
          fmt.Scan(&str)
          fmt.Printf("str: %s",str)
}
/* scan将碰到第一个空格或换行符之前的内容赋值给变量。如果
scan中有多个变量,变量值用空格或换行符分割。所以换行和空
格是不能存储到变量内的。
*/

Scanf:

语法:func Scanf(format string, a ...interface{}) (n int, err error)
例:
func main() {
    var (
        name string
        age int
    )   
    fmt.Printf("请输入内容:")
    fmt.Scanf("name:%s age:%d",&name,&age)
    fmt.Printf("n: %s, a:%d",name,age)
}   

Scanln:

语法:func Scanln(a ...interface{}) (n int, err error)
例:
func main() {
    var str string
    fmt.Printf("请输入内容:")
    fmt.Scanln(&str)
    fmt.Printf("str: %s",str)
}       
//Scanln类似Scan,但在遇到换行符时会立刻停止扫描。

总结:Scan和Scanln基本相同,唯一区别是当读取多个变量当时候,遇到换行符Scanln会直接结束,未读到输入值的变量为零值;Scan会等待,直到输入的值满足参数的个数后再遇到换行符才会结束。

Sscan,Sscanf,Sscanln

语法
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
例:
func main() {
    var i1,i2 int
    fmt.Sscan("100\n200",&i1,&i2)
    fmt.Printf("int1: %d,int2: %d", i1,i2)
}
//用法和scan基本一样,只是改成从字符串获取数据

Fscan、Fscanf、Fscanln:

func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
/*
只要对象实现了read方法(满足io.Reader接口),就能使用此方法。上面提到的Scan,Scanf,Scanln和Sscan,Sscanf,Sscanln都是有此方法封装而来。
使用方法和上面相同,只不过要多指定一个实现read方法的源。
*/

因为上面的方法都是以空格作为分割符的,所以不能获取含有空格的数据。如果有这方面的需求,可以使用bufio来实现。如下:

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("输入信息:")
    input, _ := reader.ReadString(‘\n‘)
    fmt.Printf("n: %s",input)
}
//这样会将换行符之前的数据全部赋值给input

Go语言中的fmt.Scan使用说明

标签:%s   interface   amp   new   read   获取   for   一个   var   

原文地址:https://blog.51cto.com/14601432/2482961

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!