【Go】输入输出 - fmt 包函数简介


一、前言

fmt包实现了类似 C 语言 printf 和 scanf 的格式化I/O。


二、获取输入

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

1. 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 \n", name, age, married)
}

输入:wsl 24 false
输出结果:扫描结果 name:wsl age:78 married:true

2. 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 \n", name, age, married)
}

输入:1:wsl 2:25 3:false
输出结果:扫描结果 name:wsl age:25 married:false

3. 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 \n", name, age, married)
}

输入:wsl 24 false
输出结果:扫描结果 name:wsl age:25 married:false

总结:

fmt.Scan()  //扫描,必须所有参数都被填充后换行才结束扫描
fmt.Scanln()//扫描,但是遇到换行就结束扫描
fmt.Scanf() //格式化扫描,换行就结束

注意:

注意以上都是需要使用地址来取得扫描到的数据哈

三、向外输出

1. Print

Print 系列函数会将内容输出到系统的标准输出。

区别在于 Print 函数直接输出内容,Printf 函数支持格式化输出字符串,Println 函数会在输出内容的结尾添加一个换行符:

func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)

总结:

fmt.Print()  //输出任意类型数据,不换行
fmt.Printf() //格式化输出数据,不换行
fmt.Println()//输出任意类型数据,并换行

具体实例:

package main

import (
	"fmt"
)

func main() {
	fmt.Print("在终端打印该信息。")
	name := "枯藤"
	fmt.Printf("我是:%s\n", name)
	fmt.Println("在终端打印单独一行显示")
}

输出结果:

在终端打印该信息。我是:枯藤
在终端打印单独一行显示

2. Fprint

Fprint系列函数会将内容输出到一个 io.Writer 接口类型的变量 w 中,我们通常用这个函数往文件中写入内容。

func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)

3. Sprint

Sprint系列函数会把传入的数据生成并返回一个字符串。

func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string

示例代码:

package main

import (
	"fmt"
)

func main() {
	s1 := fmt.Sprint("枯藤")
	name := "枯藤"
	age := 18
	s2 := fmt.Sprintf("name:%s,age:%d", name, age)
	s3 := fmt.Sprintln("枯藤")
	fmt.Println(s1, s2, s3)
}

输出结果:

枯藤 name:枯藤,age:18 枯藤

参考链接

  1. Golang标准库之fmt包
  2. Go语言(四)输入输出
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值