1. fmt 包初识

fmt 包,有关格式化输入输出的方法就两大类:ScanPrint ,分别在scan.go 和 print.go 文件中。

print.go文件中定义了如下函数

func Printf(format string,  a ...interface{}) (n int,  err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Sprintf(format string, a ...interface{}) string func Print(a ...interface{}) (n int, err error)
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Sprint(a ...interface{}) string func Println(a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
func Sprintln(a ...interface{}) string

这9个函数,按照两个维度来说明,基本上可以说明白了。

  • 如果把Print理解为核心关键字,那么后面跟的后缀有"f"和"ln"以及"",着重的是输出内容的最终结果;如果后缀是"f", 则指定了format 如果后缀是"ln", 则有换行符。
Println、Fprintln、Sprintln  输出内容时会加上换行符;
Print、Fprint、Sprint 输出内容时不加上换行符;
Printf、Fprintf、Sprintf 按照指定格式化文本输出内容。
  • 如果把Print理解为核心关键字,那么前面的前缀有"F"和"S"以及"",着重的是输出内容的目标(终端);如果前缀是"F", 则指定了io.Writer 如果前缀是"S", 则是输出到字符串
Print、Printf、Println      输出内容到标准输出os.Stdout;
Fprint、Fprintf、Fprintln 输出内容到指定的io.Writer;
Sprint、Sprintf、Sprintln 输出内容到字符串。

scan.go文件中定义了如下函数:

func Scanf(format string,  a ...interface{}) (n int,  err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error) func Scan(a ...interface{}) (n int, err error)
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Sscan(str string, a ...interface{}) (n int, err error) func Scanln(a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)

这9个函数可以扫描格式化文本以生成值。同样也可以按照两个维度来说明。

  • 如果把"Scan"理解为核心关键字,那么后面跟的后缀有"f"和"ln"以及"",着重的是输入内容的结果;如果后缀是"f", 则指定了format 如果后缀是"ln", 则有换行符
Scanln、Fscanln、Sscanln    读取到换行时停止,并要求一次提供一行所有条目;
Scan、Fscan、Sscan 读取内容时不关注换行;
Scanf、Fscanf、Sscanf 根据格式化文本读取。
  • 如果把"Scan"理解为核心关键字,那么前面的前缀有"F"和"S"以及"",着重的是输入内容的来源(终端);如果前缀是"F", 则指定了io.Reader 如果前缀是"S", 则是从字符串读取
Scan、Scanf、Scanln     从标准输入os.Stdin读取文本;
Fscan、Fscanf、Fscanln 从指定的io.Reader接口读取文本;
Sscan、Sscanf、Sscanln 从一个参数字符串读取文本。

2. 格式化 verb 应用

2.1 通用

符号 含义
%v 值的默认格式表示。当输出结构体时,扩展标志(%+v)会添加字段名
%#v 值的Go语法表示
%T 值的类型的Go语法表示
%% 百分号
type Person struct {
Name string
} func main() {
person := Person{Name: "亚索"}
fmt.Printf("%v", person) //{亚索}
fmt.Printf("%+v", person) //{Name:亚索}
fmt.Printf("%#v", person) //main.Person{Name:"亚索"}
fmt.Printf("%T", person) //main.Person
fmt.Printf("%%") //%
}

2.2 布尔值

符号 含义
%t 单词true或false
func main() {
fmt.Printf("%t", true) // true
fmt.Printf("%t", false) //false
}

2.3 整数

符号 含义
%b 表示为二进制
%c 该值对应的unicode码值
%d 表示为十进制
%o 表示为八进制
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于"U+%04X"
func main() {
fmt.Printf("%b", 5) // 101
fmt.Printf("%c", 0x4E2d) // 中
fmt.Printf("%d", 0x12) // 18
fmt.Printf("%o", 10) // 12
fmt.Printf("%q", 0x4E2d) // '中'
fmt.Printf("%x", 13) // d
fmt.Printf("%X", 13) // D
fmt.Printf("%U", 0x4E2d) // U+4E2D
}

2.4 浮点数与复数

符号 含义
%b 无小数部分、二进制指数的科学计数法,如-123456p-78;参见strconv.FormatFloat
%e 科学计数法,如-1234.456e+78
%E 科学计数法,如-1234.456E+78
%f 有小数部分但无指数部分,如123.456
%F 等价于%f
%g 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)
func main() {
fmt.Printf("%b", 10.20) // 5742089524897382p-49
fmt.Printf("%e", 10.20) // 1.020000e+01
fmt.Printf("%E", 10.20) // 1.020000E+01
fmt.Printf("%f", 10.20) // 10.200000
fmt.Printf("%F", 10.20) // 10.200000
fmt.Printf("%g", 10.20) // 10.2
fmt.Printf("%G", 10.20) // 10.2
}

2.5 字符串和 []byte

符号 含义
%s 直接输出字符串或者[]byte
%q 该值对应的双引号括起来的Go语法字符串字面值,必要时会采用安全的转义表示
%x 每个字节用两字符十六进制数表示(使用a-f)
%X 每个字节用两字符十六进制数表示(使用A-F)
func main() {
fmt.Printf("%s", []byte("Go语言")) // Go语言
fmt.Printf("%q", "Go语言") // "Go语言"
fmt.Printf("%x", "golang") // 676f6c616e67
fmt.Printf("%X", "golang") // 676F6C616E67
}

2.6 指针

符号 含义
%p 表示为十六进制,并加上前导的0x
type Person struct {
Name string
} func main() {
person := Person{Name: "瑞雯"}
fmt.Printf("%p",&person) // 0xc0000881e0
}

2.7 其他 flag

符号 含义
+ 总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义)
- 在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐)
# 切换格式:八进制数前加0(%#o),十六进制数前加0x(%#x)或0X(%#X),指针去掉前面的0x(%#p);
对%q(%#q),如果strconv.CanBackquote返回真会输出反引号括起来的未转义字符串;
对%U(%#U),如果字符是可打印的,会在输出Unicode格式、空格、单引号括起来的Go字面值;
0 使用0而不是空格填充,对于数值类型会把填充的0放在正负号后面;

verb会忽略不支持的旗标(flag)

type Person struct {
Name string
} func main() {
person := Person{Name: "菲奥娜"}
fmt.Printf("%+q", "中文") // "\u4e2d\u6587"
fmt.Printf("%#o", 46) // 056
fmt.Printf("%#x", 46) // 0x2e
fmt.Printf("%#p", &person) // c0000481f0
fmt.Printf("%#q", '中') // '中'
fmt.Printf("%#U", '中') // U+4E2D '中'
fmt.Printf("% d", 16) // 16
fmt.Printf("% x","abc") // 61 62 63
}

2.8 有效位输出

默认的 %f 输出格式是小数点后要有6位有效数字,不够补后置零

func main() {
fmt.Printf("%f\n", 0.31415926) // 0.314159
fmt.Printf("%f\n", 3.1415926) // 3.141593
fmt.Printf("%f\n", 314.15926) // 314.159260
fmt.Printf("%f\n", 3141.5926) // 3141.592600
fmt.Printf("%f\n", 3141.) // 3141.000000
}

Go语言中对宽度和有效数字的限定:%[宽度].[精度]f

  • 宽度是指整个浮点数的宽度,是指整数位数+小数位数 + 1(小数点算一位),指定的宽度小于实际宽度或不指定宽度时,以实际宽度展示;当指定宽度大于实际宽度时,按照对齐方式和填充字符来填充
  • 精度是指小数点后的数字个数,默认是6位,指定后按照指定的精度来,不足补后置零
func main() {
fmt.Printf("%3.3f\n", 314.15926) // 314.159
fmt.Printf("%8.3f\n", 314.15926) // 314.159
fmt.Printf("%8.f\n", 314.15926) // 314
fmt.Printf("%4.0f\n", 314.15926) // 314
fmt.Printf("%4.6f\n", 314.15926) // 314.159260
}

对于整数 %d,宽度和精度都表示整数数字个数,只是在指定宽度超过实际宽度时,指定精度会补前置零,指定宽度会按照实际宽度输出

func main() {
fmt.Printf("%d\n", 12345) // 12345
fmt.Printf("%3d\n", 12345) // 12345
fmt.Printf("%.3d\n", 12345) // 12345
fmt.Printf("%3.3d\n", 12345) // 12345
fmt.Printf("%6d\n", 12345) // 12345
fmt.Printf("%.6d\n", 12345) // 012345
fmt.Printf("%6.6d\n", 12345) // 012345
fmt.Printf("%8.7d\n", 12345) // 0012345
}

指定精度会至少要显示出这么多宽度的数字,所以不足时补零到足够为止,这时候,如果指定的宽度大于精度,那么剩余的填充符就不一定是0了,要看实际设定是什么,默认是左边补空格

对于 %e%g这些,类似,遇到百度。

『GoLang』fmt包的使用的更多相关文章

  1. 『GoLang』函数

    函数介绍 Go语言函数基本组成包括: 关键字func 函数名 参数列表 返回值 函数体 返回语句 语法如下: func 函数名(参数列表) (返回值列表) { // 函数体 return } 除了ma ...

  2. 『GoLang』语法基础

    标识符 字母或下划线开头 之后只能出现数字.字母.下划线 大小写敏感 Go语言关键字 break default func interface select case defer go map str ...

  3. 『GoLang』包

    可见性规则 在Go语言中,标识符必须以一个大写字母开头,这样才可以被外部包的代码所使用,这被称为导出.标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的.但是包名不管 ...

  4. 『Golang』MongoDB在Golang中的使用(mgo包)

    有关在Golang中使用mho进行MongoDB操作的最简单的例子.

  5. 『Golang』在Golang中使用json

    由于要开发一个小型的web应用,而web应用大部分都会使用json作为数据传输的格式,所以有了这篇文章. 包引用 import ( "encoding/json" "gi ...

  6. 『GoLang』string及其相关操作

    目录 1. 字符串简介 2. 字符串的拼接 3. 有关 string 的常用处理 3.1 strings 包 3.1.1 判断两个 utf-8 编码字符串是否相同 3.1.2 判断字符串 str 是否 ...

  7. 『Golang』Martini框架入门

    本文介绍golang中的优秀web开发框架martini! 序 Martini框架是使用Go语言作为开发语言的一个强力的快速构建模块化web应用与服务的开发框架.Martini是一个专门用来处理Web ...

  8. 『Golang』Go简介以及环境搭建

    简介 go语言是由Google进行维护的一个编程语言,发布自2009年.其以良好的编程风格.优秀的并发机制被广大的技术人员所接受. 使用go语言开发的优秀的产品: Docker gocode lime ...

  9. 『Golang』—— 标准库之 os

    Golang 的 os 库基本承袭 Unix 下 C 语言的用法 path 库: func Base(path string) string //取文件名,不含目录部分 func Dir(path s ...

随机推荐

  1. 手机摄像头作为视频画面捕捉设备与OBS连接(有线)

    手机有线连接OBS(以无他伴侣作为测试案例) 1.硬件设备 安卓手机1台.安卓手机对应的数据线.电脑2台(windows系统,1台做OBS与手机连接.1台做直播后台:配置等如果能达到要求也可以只使用一 ...

  2. Spring-Boot注入自定义properties文件配置

    创建wzq.properties wzq.properties注入User实体类中 @PropertySource(value = "classpath:wzq.properties&quo ...

  3. ASP.NET Core:ASP.NET Core中使用NLog记录日志

    一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...

  4. 乌班图安装redis问题

    ot@DESKTOP-5382063:/usr/local/redis/redis-3.0.4# make\ > cd src && make all make[1]: Ente ...

  5. 阿里云服务器上部署java项目(安装jdk,tomcat)

    安装JDK a.执行下面的yum指令安装,无线配置环境变量. 1.yum -y update #首先更新一下YUM源2.yum list Java* ---------#列出所有的JDK 3.yum ...

  6. Learning ROS: Ubuntu16.04下kinetic开发环境安装和初体验 Install + Configure + Navigating(look around) + Creating a Package(catkin_create_pkg) + Building a Package(catkin_make) + Understanding Nodes

    本文主要部分来源于ROS官网的Tutorials. Ubuntu install of ROS Kinetic # Setup your sources.list sudo sh -c 'echo & ...

  7. 并发编程之:Lock

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 在之前的文章中,为了保证在并发情况下多线程共享数据的线程安全,我们会使用synchronized关键字来修饰方法或者代码块,以及在生产者消费者模式中同 ...

  8. HTTP系列之:HTTP中的cookies

    目录 简介 cookies的作用 创建cookies cookies的生存时间 cookies的权限控制 第三方cookies 总结 简介 如果小伙伴最近有访问国外的一些标准网站的话,可能经常会弹出一 ...

  9. CSS 是啥?前端小白入门级理解

    What is CSS? CSS stands for Cascading Style Sheets CSS describes how HTML elements are to be display ...

  10. JS 根据文件路径获取名字和后缀名

    var fileName = this.from.doc.substring(this.from.doc.lastIndexOf('/')+1); //文件名           var extNam ...