Go语言输入输出
本篇涉及函数的知识,不过没有影响
package fmt
fmt包实现了类似C语言printf和scanf的格式化I/O。格式化动作('verb')源自C语言但更简单。
fmt.Println函数我们知道是打印换行的函数。
文档中是这样的:
func Println(a ...interface{}) (n int, err error)
** a …interface{} 的意思是接受任意类型的参数, *(n int, err error) 代表这个函数返回的参数 **
一、输出
标准输出
常用的标准输出函数有以下三种,都会将数据输出到标准设备,如屏幕。
都是以P开头的函数,用法基本相同。
值得一提的是go语言通过大小写来决定公开程度,如大写字母开头即代表public
fmt.Println()//输出任意类型数据,并换行
fmt.Print() //输出任意类型数据,不换行
fmt.Printf()//格式化输出数据,不换行
如下:
fmt.Println("我是fmt.Println()输出的数据,我换行啦")
fmt.Print("我是fmt.Print()输出的数据,我不换行")
fmt.Printf("我是 fmt.Printf()输出的数据,格式化输出不换行。。。%s","ha")
我是fmt.Println()输出的数据,我换行啦
我是fmt.Print()输出的数据,我不换行我是 fmt.Printf()输出的数据,格式化输出不换行。。。ha
当然fmt.Print()这些不换行你可以通过转义字符来控制换行,如\n等
非标准输出
也有其他输出,比如Fprintf等,这我们将在后面接触。
Fprintf根据format参数生成格式化的字符串并写入w。返回写入的字节数和遇到的任何错误。
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
二、输入
标准输入
fmt.Scan()//扫描,必须所有参数都被填充后换行才结束扫描
fmt.Scanln()//扫描,但是遇到换行就结束扫描
fmt.Scanf()//格式化扫描,换行就结束
??注意以上都是需要使用地址来取得扫描到的数据哈
如fmt.Scan(&x,&y)
分别演示一下
Scan
func main() {
var(
x,y string
)
fmt.Println("输入两个字符串:")
fmt.Scan(&x,&y)
fmt.Println("x :"+x)
fmt.Println(" y:"+y)
}
结果如下,必须接受两个值才可以结束。输入一个值换行不会结束。
输入两个字符串:
he
ok
x :he
y:ok
Scanln
func main() {
var(
x,y string
z string
)
fmt.Println("输入三个字符串:")
fmt.Scanln(&x,&y,&z)
fmt.Println("x :"+x)
fmt.Println(" y:"+y)
fmt.Println("z:"+z)
}
只要换行就结束
输入三个字符串:
ha yes lala
x :ha
y:yes
z:lala
//只输入一个字符串也结束
输入三个字符串:
eee
x :eee
y:
z:
Scanf
func main() {
var(
x,y string
z string
)
fmt.Println("输入三个字符串:")
fmt.Scanf("%s %s %s",&x,&y,&z)
fmt.Println("x :"+x)
fmt.Println(" y:"+y)
fmt.Println("z:"+z)
}
格式化输入,只要换行就结束
输入三个字符串:
ha la hou
x :ha
y:la
z:hou
//只输入一个字符串也结束
输入三个字符串:
eee
x :eee
y:
z:
非标准输入
如 Fscanf等
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
Fscanf从r扫描文本,根据format 参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。
输入输出流
以上标准输入都是fmt包下的,fmt包比较方便
当然也可以通过输入流解决,如下输入:
func main() {
inputReader := bufio.NewReader(os.Stdin) // 使用了自动类型推导,不需要var关键字声明
//inputReader = bufio.NewReader(os.Stdin)
fmt.Println("Please input your name: ")
//input, err = inputReader.ReadString('\n')
input, err := inputReader.ReadString('\n')
if err == nil {
fmt.Printf("Your name is: %s\n", input)
}
}
这是输入输出流,在处理复杂数据流的时候很给力,处理简单文本数据就显得比较繁琐了,所以fmt包就是简化版的输入输出,对我们常用的的数据处理进行的封装。