golang碎片整理之 fmt.Scan

本文介绍了从golang语言中fmt包从标准输入获取数据的Scan系列函数、从io.Reader中获取数据的Fscan系列函数以及从字符串中获取数据的Sscan系列函数的用法。

Scan系列

go语言fmt包下有fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,可以在程序运行过程中从标准输入获取用户的输入。

fmt.Scan

语法

func Scan(a ...interface{}) (n int, err error)
  • Scan 从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。

代码示例

package main

import "fmt"
func main(){
    var (
        name string
        age int
        married bool
    )
    fmt.Scan(&name,&age,&married)
    fmt.Printf("扫描结果 name:%s age:%d married:%t\t",name,age,married)
}

将上述代码在终端运行,在终端依次输入 Alfred 、26、false使用空格分隔。

go run main.go
alfred 26 false
扫描结果 name:alfred age:26 married:false

fmt.Scan从标准输入中扫描用户输入的数据,将以空白符分隔的数据分别存入指定的参数中。

fmt.Scanf

语法

func Scanf(format string, a ...interface{})(n int, err error)
  • Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。

    代码实例

    package main
    import "fmt"
    func main(){
    var (
        name string
        age int
        married bool
    )
    fmt.Scanf("1:%s 2:%d 3:%t", &name,&age,&married)
    fmt.Printf("扫描结果 name:%s age:%d married:%t", name,age,married)
    }

将上面的代码编译后在终端执行,在终端按照指定的格式一次输入1:alfred 2:26 3:false 。

go run main.go
1:alfred 2:26 3:false
扫描结果 name:alfred age:26 married:false

fmt.Scanf和fmt.Scan不同于以简单的空格符作为输入数据的分隔符,fmt.Scanf为输入数据指定了具体的输入内容格式,只有按照格式输入数据才会被扫描并存入对应变量。

例如,我们还是按照上个示例中以空格符分隔的方式输入,fmt.Scanf就不能正确扫描到输入的数据。

fmt.Scanln

语法

func Scanln(a ...interface{}) (n int, err error)
  • Scanln类似于Scan,它遇到换行才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。

代码示例

package main
import "fmt"
func main(){
    var (
        name string
        age int
        married bool
    )
    fmt.Scanln(&name,&age,&married)
    fmt.Printf("扫描结果 name:%s age:%d married:%t",name,age,married)
}

将上述代码编译后在终端执行,在终端依次输入alfred 26 false使用空格分隔。

go run main.go
alfred 26 false
扫描结果 name:alfred age:26 married:false

fmt.Scanln遇到回车就结束扫描了,这个比较常用。

Fscan系列

func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)

这几个函数功能类似于fmt.Scan 、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从io.Reader中读取数据。

Sscan系列

func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)

这几个函数功能类似于fmt.Scan 、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从指定字符串中读取数据。

原文地址:https://blog.51cto.com/13766835/2389523

时间: 2024-08-13 04:14:07

golang碎片整理之 fmt.Scan的相关文章

golang 碎片整理 之 指针

golang中保留了C中的值和指针的区别,但对于指针的繁琐用法进行了简化,引入了"引用"的概念,所以在go语言中,你不用担心因为直接操作内存而引起各式各样的错误.运算符只有 & 和 ,一个是取地址一个是取值(解析地址). func main(){ var i int i = 1 var p *int p = &i fmt.Printf("i=%d,p=%d,*p=%d\n",i,p,*p) *p =2 fmt.Printf("i=%d,p=

golang 碎片整理之 结构体

什么是结构体? 结构体(struct)是用户自定义的类型,它代表若干字段的集合,可以用于描述一个实体对象,类似Java中的class,是golang面向对象编程的基础.结构体的概念在软件工程上的旧术语是ADT(抽象数据类型: Abstract Date type).在c++它也是存在,并且名字也是struct,在面向对象的编程语言中,跟一个无方法的轻量级类一样.因为在Go语言中没有类的概念,所以在go中结构体有着很重要的地位. 如何定义一个结构体 type Coordinate struct {

golang 碎片整理之MySQL

MySQL是常用的关系型数据库,本文介绍了go语言如何操作MySQL数据库. Go操作MySQL 连接 Go语言中的database/sql 包提供了保证SQL或类SQL数据库的广泛接口,并不提供具体的数据库驱动.使用database/sql包时必须注入一个数据库驱动. 下载依赖 go get -u github.com/go-sql-driver/mysql 使用MySQL驱动 func Open(driverName,dataSourceName string)(*DB,error) Ope

golang 碎片整理之 函数

函数是组织好的,可重复利用的.用于执行指定任务的代码块.go语言中支持函数.匿名函数和闭包,并且函数在go语言中属于"一等公民". 函数定义 go语言中使用func关键字定义函数,具体格式如下: func 函数名(参数) (返回值){ 函数体 } 其中, 函数名由字母.数字.下划线组成,但是函数名的第一个字母不能是数字,在同一个包内,函数名也不能重名. 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔. 返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型

golang碎片整理之反射

本文介绍go语言反射的意义和基本使用. 变量的内在机制 go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息 值信息:程序运行过程中可动态变化的. 反射的介绍 反射是指在程序运行期对程序本身进行访问和修改的能力.程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分.在运行程序时,程序无法获取自身的信息.支持反射的语言可以在程序编译期将变量的反射信息,如字段名称,类型信息.结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射

golang 碎片整理之 并发

并发与并行 并发:同一时间段内执行多个任务.并行:同一时刻执行多个任务. Go语言的并发通过goroutine实现.goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作.goroutine是由go语言的运行调度完成的,而线程是由操作系统调度完成的.Go语言还提供了channel在多个goroutine间进行通信.goroutine和channel是go语言秉承的CSP(Communicating Sequential Process)并发模式的

浅谈磁盘碎片整理的好处与方法

磁盘碎片整理的好处 1.磁盘碎片整理可以让系统运行更顺畅,减少卡顿的现象,提高系统性能.2.需要注意的是,使用固态硬盘的用户千万不要使用"磁盘碎片整理"功能,因为所使用的技术不同,使用Windows自带的磁 盘碎片整理会使固态硬盘的寿命大大减短. 磁盘碎片整理的方法步骤 打开"此电脑",选中任意磁盘盘符,然后点击"管理"-"优化" 选中整理的磁盘,可以使用"Ctrl"+ "鼠标左键"来选

磁盘碎片整理程序的原理是什么?

盘碎片整理,就是通过系统软件或者专业的磁盘碎片整理软件对电脑磁盘在长期使用过程中产生的碎片和凌乱文件重新整理,释放出更多的磁盘空间,可提高电脑的整体性能和运行速度. 磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的.硬盘在使用一段时间后,由于反复写入和删除文件,磁盘中的空闲扇区会分散到整个磁盘中不连续的物理位置上,从而使文件不能存在连续的扇区类.这样,再读写文件时就需要到不同的地方去读取,增加了磁头的来回移动,降低了磁盘的访问速度.当应用

Defraggler2.15.742汉化单文件(磁盘碎片整理)

Defraggler2.15.742汉化单文件(磁盘碎片整理工具)由Black Hawk 汉化软件语言,绿色单文件版,去掉菜单在线帮助,软件下方在线帮助.检查更新.Defraggler中文版是一个轻量级的整理工具,但它可以快速高效的整理某个磁盘.文件夹甚至一个文件.也可以对硬盘进行查错,Defraggler对系统资源占用极小.无需添加系统服务,用起来也实在是太简单. 百度下载:http://pan.baidu.com/s/1o6wS8Bo 百度指导:http://dwz.cn/spjIn