Golang格式化小结
Golang的格式化使用了与c、python等语言类似的风格,但是更加丰富和通用。格式化函数在fmt包中,如:fmt.Printf,fmt.Fprintf,fmt.Sprintf,fmt.Println等等。其中Print,Fprint,Sprint都有一个对应d的ln函数版本和print版本(f指format,ln指line)。
| Print版本 | f版本 | ln版本 | 输出 |
|---|---|---|---|
| Printf | Println | 结果写到标准输出 | |
| Sprint | Sprintf | Sprintln | 结果会以字符串形式返回 |
| Fprint | Fprintf | Fprintln | 输出结果会被写入到第一个参数提供的输出中 |
ln版本(Println,Fprintln,Sprintln),这些函数不接受格式字符串,每个参数都会使用一个缺省的格式字符串。而且ln版本还会在参数之间插入一个空格,并且在末尾添加一个换行符。而以ln结尾的格式化函数,则遵循Println的方式。Print版本只有当两边的操作数都不是字符串的时候,才会添加一个空格。f版本格式化函数需要指定格式化字符串参数,指定后续参数被如何格式化。各个参数的格式取决于"转换字符"(conversion character),形式为:百分号+字母,如,%d。按照惯例,以字母f结尾的格式化函数,如:log.Printf、fmt.Errorf都采用fmt.Printf的格式化标准。
1.格式字符串
Golang的格式化字符串由普通字符和占位符组成,如:
"abcd%+ #8.3[3]vefg"
其中abcd和efg是普通字符,其他部分是占位符。占位符以%开头,以动词结尾,格式如下:
%[旗标][宽度][.精度][arg索引]动词
其中,方括号中的内容是可缺省的。
1.1旗标
旗标有以下几种:
+: 对于数值类型总是输出正负号;对于%q(%+q)保证只输出ASCII编码的字符
-: 在右边进行宽度填充,而不是默认的左边。
空格: 对于数值类型的正数,保留一个空白的符号位(其它用法在动词部分说明)。
0: 用 0 进行宽度填充而不用空格,对于数值类型,符号将被移到所有 0 的前面。
#: 备用格式:为八进制添加前缀0(%#o);为十六进制添加前缀0x(%#x)或者0X(%#X);
为%p(%#p)去掉前缀0x;。
其中 "0" 和 "-" 不能同时使用,优先使用 "-" 而忽略 "0"。
格式化转换列表如下:
1.2宽度-精度
宽度与精度的控制格式以Unicdoe码点为单位,这和C的printf不同,它以字节数为单位。两者或者其中之一均可以用'*'表示,此时它们的值会从下一个操作数中获取,该操作数类型必须为int。
- 对数值而言,宽度为该数值占用区域的最小宽度;精度为小数点后的位数。但是对%g(%G),精度为数字的总和。
- 对于大多数数值而言,宽度为输出的最小字符串,如果必要则会为已格式化的形式添加空格。
- 对于字符串,精度为输出的最大字符数,必要时会截断字符串。
1.3占位符
| 格式 | 说明 |
|---|---|
| %d | 十进制数 |
| %b,%o,%x | 二进制、八进制、十六进制整数 |
| %#b,%#o,%#x | 二进制、八进制、十六进制整数,并显示相应前缀 |
| %f,%g,%e | 浮点数 |
| %t | 布尔值: true或者false |
| %c | 相应Unicode码点表示的字符 |
| %s | 字符串 |
| %U | 显示Unicode码点 |
| %q | 带双引号的字符串"abc123"或者带单引号的字符'a','b' |
| %v | 变量的自然形式(natural format) |
| %#v | 使用Go语言类是的语法打印变量值 |
| %T | 变量的类型 |
| %% | 字面上的百分号标志(无操作数) |
| %p | 十六进制表示指针地址,并使用前缀0x |
1.4 格式化整数
num := 022
fmt.Printf("%d\n", num) //十进制
fmt.Printf("%b\n", num) //二进制
fmt.Printf("%o\t %#o \n", num, num) //八进制,显示0前缀
fmt.Printf("%x\t %#x \t%#X\n", num, num, num) //十六进制,显示0x,0X前缀
// output:
// 18
// 10010
// 22 022
// 12 0x12 0X12
1.5 浮点数
浮点数格式化,可以使用%f、%g、%e,这三种打印形式都可以指定打印的宽度、控制打印的精度。
| 格式 | 说明 |
|---|---|
| %e,%E | 科学计数法,以10为底 |
| %f,%F | 普通小数格式 |
| %g | 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的 0)输出 |
| %G | 根据情况选择 %E 或 %F 以产生更紧凑的(无末尾的 0)输出 |
for x := 0; x < 12; x++ {
fmt.Printf("x = %2d e^x = %9.3f\t(%9.3[2]e)\t(%9.3[2]g)\n", x, math.Exp(float64(x)))
}
// output: %9.3f %9.3[2]e %9.3[2]g
// x = 0 e^x = 1.000 (1.000e+00) ( 1)
// x = 1 e^x = 2.718 (2.718e+00) ( 2.72)
// x = 2 e^x = 7.389 (7.389e+00) ( 7.39)
// x = 3 e^x = 20.086 (2.009e+01) ( 20.1)
// x = 4 e^x = 54.598 (5.460e+01) ( 54.6)
// x = 5 e^x = 148.413 (1.484e+02) ( 148)
// x = 6 e^x = 403.429 (4.034e+02) ( 403)
// x = 7 e^x = 1096.633 (1.097e+03) ( 1.1e+03)
// x = 8 e^x = 2980.958 (2.981e+03) ( 2.98e+03)
// x = 9 e^x = 8103.084 (8.103e+03) ( 8.1e+03)
// x = 10 e^x = 22026.466 (2.203e+04) ( 2.2e+04)
// x = 11 e^x = 59874.142 (5.987e+04) ( 5.99e+04)
注: %9.3f、%9.3[2]e或%9.3[2]g中9.3表示:宽度为9,小数点后保留3位,[2]表示重用Printf的第二个参数。宽度为该数值占用区域的最小宽度;精度为小数点后的位数。但是%g(%G),精度为数字的总和。
1.6 重用参数
fmt.Printf("%d %[1]o %#[1]o\n",0666)
通常Printf格式化参数包含多个%参数时,会包含同数量的操作数,%后的[1]告诉Printf函数再次使用第一个操作数
1.7 字符串

for i, r := range "Hello, 世界" {
fmt.Printf("%d\t%q\t%d\n", i, r, r)
}
//output:
// 0 'H' 72
// 1 'e' 101
// 2 'l' 108
// 3 'l' 108
// 4 'o' 111
// 5 ',' 44
// 6 ' ' 32
// 7 '世' 19990
// 10 '界' 30028
参考资料
Golang格式化小结的更多相关文章
- golang格式化输出-fmt包用法详解
golang格式化输出-fmt包用法详解 注意:我在这里给出golang查询关于包的使用的地址:https://godoc.org 声明: 此片文章并非原创,大多数内容都是来自:https:// ...
- golang 格式化时间为字符串
package main import ( "fmt" "reflect" "time" ) func main() { //格式化字符串为 ...
- golang 格式化时间成datetime
Golang或者Beego,总需要往数据库里写datetime时间戳. Golang对时间格式支持并不理想. 先看一个例子: package main import ( "fmt" ...
- Golang 文件服务器小结
花了一个星期学习文件服务器,老是在一些地方搞混,整理一下所学的,清晰了不少. 学Go半个月,还有很多不懂的地方,有理解错误的,还望高手指出. 注:以下代码中,w为http.ResponseWriter ...
- golang学习之奇葩的time format
golang格式化时间时,比如如下格式进行格式化输出: fmt.Println(time.Now().Format("2007年03月")) 程序直接输出: 16007年02月 很 ...
- 十天快速入门Python
课程导学 001 课程定位和目标 002 课程导学 第一部分 Python快速入门 第1天 Python基本语法元素 003 Python基本语法元素 004 程序设计基本方法 005 Python开 ...
- python奇闻杂技
第一天 01 从计算机到程序设计语言 02 python环境配置 03 实例一:温度转换 04 python语法分析 第二天 01 深入理解python语言 02 实例二,python蟒蛇配置 03 ...
- 亲测可用!!!golang如何在idea中保存时自动进行代码格式化
亲测可用,golang在idea中的代码自动格式化 1.ctrl+alt+s打开设置界面,选择[Plugins] -> [Install JetBrains plugin...] -> 搜 ...
- Golang时间格式化
PHP中格式化时间很方便,只需要一个函数就搞定: date("Y-m-d H:i:s") 而在Golang中,用的是"2006-01-02 15:04:05"这 ...
随机推荐
- Eureka Server项目启动报错处理
Eureka Server项目启动报错处理 Eureka是一个服务发现组件,提供服务注册.发现等注册中心功能,使用spring boot启动eureka应用时出现报错: 20:36:17.646 [r ...
- [日常] SinaMail项目和技术能力总结
一.企邮WEBMAIL项目1.完成手机绑定二次验证,绑定手机提升账户的安全性2.登陆验证接口改造,增加一系列登陆限制,增强webmail的系统可靠性3.增加外发限制功能,及时控制用户发信行为,有利于企 ...
- Java的工厂模式(二)
除了上文提到的方法之外,还可以使用Java的反射机制,这样就能使用类名称来加载所需要的类.我们只需改变工厂类和驱动类就可以了. FruitFactory.java package com.muggle ...
- Zookeeper学习文章目录1
目录:参考文章如下 1.ZooKeeper学习第一期---Zookeeper简单介绍 2. ZooKeeper学习第二期--ZooKeeper安装配置 3. ZooKeeper学习第三期---Zook ...
- 关于vue跨域名对接微信授权认证和APP授权认证
这种情况一般也只会出现在前后端分离,跨域名授权的时候吧.耗费了一个前端+一个后台+一个网关,熬夜通宵了两天才整出来一套方法(你们见过凌晨6点的杭州吗,对,我下班的时候天黑了,到家天亮了....),和开 ...
- Wampserver环境配置
☆根目录修改问题 /.修改运行根目录 1.修改apache配置,将服务请求定位到新目录下 →左击wampserver,点击Apache打开httpd.conf文件,Ctrl+f搜索documentro ...
- nodejs做的一个测试端口程序
最近在学习nodejs的http,然后做了一个测试域名有没有使用那些端口,原意是用来做一个本地的静态服务器,然后运行前先测试端口,首先要用到的是net模块,主要用到的是Socket,判断其连接状态即可 ...
- 从敲入 URL 到浏览器渲染完成、对HTTP协议的理解
1. 大致过程 当你这样子回答的时候: 用户输入 url 地址,浏览器查询 DNS 查找对应的请求 IP 地址 建立 TCP 连接 浏览器向服务器发送 http 请求,如果服务器段返回以 301 之类 ...
- SpringMVC作用、SpringMVC核心组件、创建项目流程
SpringMVC框架 1. 作用 解决了V-C的交互问题,即视图与控制器的交互问题. 在原生的Java EE技术中,使用Servlet作为项目中的控制器,用于接收用户的请求,并给予响应结果.这种做法 ...
- js dictionary字典 遍历
var dic={A:"AA",B:"BB",C:"CC"} //不能length去for循环(length:undefined) dic[ ...