Golang中的格式化输入输出
Golang中的格式化输入输出
打印输出
在Go语言中有多种输出方式,不同的输出适用场景不同。归纳起来有三种,每种还分为3种方式(原内容、原内容+ln、原内容+f)
PrintXX()
FprintXX()
SprintXX()
FprintXX
FprintXX在Go Web中使用比较多,把内容写到响应流中。
以Fprintln()为例,源码如下:
// Fprintln formats using the default formats for its operands and writes to w. // Spaces are always added between operands and a newline is appended. // It returns the number of bytes written and any write error encountered. func Fprintln(w io.Writer, a ...interface{}) (n int, err error) {p := newPrinter()p.doPrintln(a)n, err = w.Write(p.buf)p.free()return }
函数参数中第一个参数是输出流,后面参数是内容,表示把内容写入到输出流中
第一个返回值表示输出内容的长度(字节数)
Fprintln()输出后会添加换行符,所以长度比内容多1个
Fprintln()源码中p.doPrintln(a)的源码如下:
// doPrintln is like doPrint but always adds a space between arguments // and a newline after the last argument. func (p *pp) doPrintln(a []interface{}) {for argNum, arg := range a {if argNum > 0 {p.buf.writeByte(' ')}p.printArg(arg, 'v')}p.buf.writeByte('\n') }
FprintXX()支持下面三种方式
- os.Stdout表示控制台输出流
func main() {fmt.Fprint(os.Stdout, "内容1") // 向流中写入内容,多个内容之间没有空格fmt.Fprintln(os.Stdout, "内容2") // 向流中写入内容额外写如换行符,多个内容之间有空格分割fmt.Fprintf(os.Stdout, verb, "内容3") // 根据verb格式向流中写入内容 }
PrintXX
以Println()举例,源码如下:
// Println formats using the default formats for its operands and writes to standard output. // Spaces are always added between operands and a newline is appended. // It returns the number of bytes written and any write error encountered. func Println(a ...interface{}) (n int, err error) {return Fprintln(os.Stdout, a...) }
- 可以看到Println()底层实际是Fprintln()
- Println()把结果打印到控制台,返回内容长度和错误。
PrintXX支持下面三种方式
func main() {fmt.Print("内容", "内容") // 输出内容后不换行fmt.Fprintln("内容", "内容") // 输出内容后换行fmt.Fprintf(verb, "内容") // 根据verb输出指定格式内容 }
SprintXX
以Sprintln()举例,源码如下:
// Sprintln formats using the default formats for its operands and returns the resulting string. // Spaces are always added between operands and a newline is appended. func Sprintln(a ...interface{}) string {p := newPrinter()p.doPrintln(a)s := string(p.buf)p.free()return s }
- Sprintln()把形成结果以字符串形式返回,并没有打印到控制台。
- 从严格意义讲SprintXX不是打印输出,而更像字符串转换。
SprintXX支持下面三种写法
func main() {fmt.Sprint("内容1", "内容2")fmt.Sprintln("内容2")fmt.Sprintf(verb, "内容3") }
常用转义字符汇总
verb | 含义 |
---|---|
%d | 十进制整数 |
%x,%X | 大小写方式显示十六进制整数 |
%o | 八进制整数 |
%b | 二进制整数 |
%f,%g,%e | 浮点数 |
%t | 布尔值 |
%c | 字符 |
%s | 字符串 |
%q | 输出带双引号的字符串 |
%v | 对应值的默认格式 |
%T | 类型 |
%p | 内存地址 |
%% | 字符% |
\n | 换行 |
\t | 缩进 |
接收用户输入
程序运行时,运行到接收用户输入语句,程序阻塞,用户在控制台输入内容后,把内容赋值给对应的变量,程序继续运行。
接收用户输入的几种方式
使用Scanln(&变量名, &变量名)的方式接收
- 输入的内容必须都在同一行
- 每个内容之间使用空格分割
- 回车换行后表示停止输入
- 如果希望接收3个值,而在控制台只输入2个值,回车后也停止接收
- 如果希望接收2个值,而在控制台输入3个值,回车后只能接收两个值
func main() {var name, age stringfmt.Print("请输入姓名和年龄: ")fmt.Scanln(&name, &age) // 此处&变量名是地址fmt.Println("接收到的内容为: ", name, age)
}
使用Scanf(verb, &变量名)按照指定的格式进行输入
func main() {var a, b stringfmt.Scanf("%s\n%s", &a, &b)fmt.Printf("%s\n%s", a, b)
}
上面程序中,每次换行输入一个内容。
如果需要同行输入两个字符串,中间使用空格分割。
func main() {var a stringvar b string//输入时必须输入: aaa bbb//如果中间没有空格则把所有内容都赋值给了afmt.Println(a, b)
}
Golang中的格式化输入输出相关推荐
- Python练习 | Python3中的格式化输入输出之print函数
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 Python2版本和Python3 ...
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
格式化输入输出 1. fprintf(格式化输出数据至文件) 相关函数 printf,fscanf,vfprintf 表头文件 #include<stdio.h> 定义 ...
- C++格式化输入输出
要实现格式化输入输出,程序需要包含 iostreams 标准标头 <iomanip> 以定义几个各自采用单个参数的操控器. 备注: 其中每个操控器都返回重载 basic_istream&l ...
- python输出变量代码_Python中变量的输入输出实例代码详解
1.变量的输入: input函数: input() input("请输入银行卡密码") password = input("请输入银行卡密码") 变量名 = i ...
- java判断输入的格式化_Java的字符串及格式化输入输出
Java的字符串及格式化输入输出 1.String的不可变 在浅析Java的jvm上的内存位置的分配里已经说明,String使用了常量池技术,所以在栈中的应用要么是指向常量池,要么是指向堆,Strin ...
- std::string格式化输入输出
在C语言中: C函数有sprintf函数, 比较方便, 但是需要知道所需要的内存空间是多少. 在C++的框架MFC中: 在MFC中CString 有Format函数来格式化字符串. 很方便. 难过的是 ...
- C语言笔记:格式化输入输出(fprintf、fscanf、sscanf...)
C语言笔记:格式化输入输出(fprintf.fscanf.sscanf-) 包含以下函数的基本库:stdlib.h fprintf int fprintf(FILE *stream, const ch ...
- golang 操作日期_使用Godate在Golang中轻松进行日期操作
golang 操作日期 by Kofo Okesola 由Kofo Okesola 使用Godate在Golang中轻松进行日期操作 (Easy date manipulation in Golang ...
- Linux Signal及Golang中的信号处理
转载地址:https://colobu.com/2015/10/09/Linux-Signals/ 信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方 ...
最新文章
- dqn在训练过程中loss越来越大_用DQN算法玩FlappyBird
- java操作mongodb基础(查询 排序 输出list)
- Spring Sleuth和Zipkin跟踪微服务
- SQL Server 2012 Managed Service Account
- VTK:绘制圆圈用法实战
- 图书管理系统c++_校园图书系统写后感
- 微信公众号 模版消息 跳转到小程序报错{ errcode: 40013, errmsg: 'invalid appid hint: [cC6RwA09011295]' }
- 智能机器人路径规划及代码_AI割草机器人用ML+传感器自动规划路径
- TensorFlow入门--张量的定义与基本运算
- 关于kafka的几个问题
- idea中新建javaWeb项目
- signature=c91e848161f7e366c6b81d68e4a56197,Prince (Short Story)
- 蓝桥杯 BASIC-4 基础练习 数列特征
- 【Unity】unity3d客户端网络框架
- 凯恩帝串口通信怎么设置_凯恩帝K100T-Ci_V3.1_连接调试手册_140815.pdf
- 计算机行业的最新技术,计算机行业发展空间巨大 三大必然趋势引领发展
- 惠普笔记本电脑驱动BIOS下载中心,战66驱动下载
- android消息提示框大小,android Toast設置彈框大小
- 【微信小程序】关于小程序的协同工作与发布的工作流程
- 单片机、ARM、DSP、FPGA区别与应用领域