fmt print

Go标准库fmt实现了类似C语言printfscanf的格式化I/O,主要分为向外输出内容和获取输入内容两大部分。

向外输出

向外输出函数分为三类

向外输出 描述
Print系列 将内容输出到系统标准输出os.Stdout
Fprint系列 将内容输出到一个io.Writer接口类型的变量中
Sprint系列 将传入的数据生成并返回一个字符串

Print系列函数会将内容输出到系统标准输出os.Stdout

func Print(a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
函数 描述
fmt.Print 输出到控制台,不接受任何格式化操作。
fmt.Println 输出到控制台并换行
fmt.Printf 仅打印出格式化的字符串
func Print(a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)

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

函数 描述
fmt.Fprint 输出到io.Writer而非io.Stdout
fmt.Fprintln 输出到io.Writer并换行
fmt.Fprintf 格式化并输出到io.Writer
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

例如:输入打印到日志文件

func file_put_content(filename, content string) {
    fh, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        fmt.Println(err)
        return
    }
    now := time.Now().Format("2006-01-02 15:04:05")
    _, _ = fmt.Fprintf(fh, "%s %s\n", now, content)
}
func main() {
    file_put_content("demo.log", "hello world")
    file_put_content("demo.log", "hell word")
}

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

函数 描述
fmt.Sprint 返回一个字符串而不带任何输出
fmt.Sprintln 返回一个字符串且换行
fmt.Sprintf 格式化并返回一个字符串而不带任何输出
func Sprint(a ...interface{}) string
func Sprintln(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string

错误输出

func Errorf(format string, a ...interface{}) error

fmt.Errorf()会根据format参数生成格式化字符串并返回一个error类型的错误对象,可用于自定义错误类型,比如通常在错误中需要获得对应位置信息。

例如:自定义错误类型

err := fmt.Errorf("%s\n", "define error")

格式化占位符

Printf系列函数都支持format格式化参数

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 Errorf(format string, a ...interface{}) error

按照格式化占位符被替换的变量类型划分

  • 通用占位符
  • 字符占位符
  • 布尔占位符
  • 整数占位符
  • 小数占位符
  • 序列占位符
  • 指针占位符
通用占位符 描述
%v 值的默认格式
%+v 打印结构体时会添加字段名
%#v 值的Go语法表示
%T 打印值的Go类型
%% 字面上的百分号

字符占位符

字符占位符 描述
%s 直接输出字符串或[]byte字符数组
%q 值对应的双引号包裹起来的Go语法字符串字面量,必要时会采用安全的转义标识。
%x 每个字节使用两个字符16进制数表示,16进制小写a-f。
%X 每个字节使用两个字符16进制数表示,16进制大写A-F。
布尔占位符 描述
%t 输出布尔值true或false
整数占位符 描述
%b 二进制表示
%c 相应Unicode码点所表示的字符
%d 十进制表示
%o 八进制表示
%x 十六进制表示,字母形式为小写。
%X 十六进制表示,字母形式为大写。
%U Unicode格式
%q 单引号围绕的字符字面值,由Golang语法安全地转义。
小数占位符 描述
%f 等同于%.6f,6位小数点,有小数点而无指数。
%e 等同于%.6e,6位小数点,科学计数法。
%E 科学计数法
%g 根据情况选择%e或%f以产生更为紧凑的输出
%G 根据情况选择%E或%f以产生更为紧凑的输出
序列占位符 描述
%s 输出字符串表示
%10s 输出字符串最小宽度为10且右对齐
%-10s 输出字符串最小宽度为10且左对齐
%.5s 输出字符串最大宽度为5
%5.10s 输出字符串最小宽度为5,最大宽度为10。
%-5.10s 输出字符串最小宽度为5,最大宽度为10,左对齐。
%5.3s 输出字符串宽度为5,若源字符串宽度大于3则截断。
%010s 若宽度小于10则在字符串前补零
%q 双引号围绕的字符串,由Golang语法安全地转义。
指针占位符 描述
%p 十六进制,前缀0x。
%#p 不带前缀ox的十六进制

标志符

标志符 描述
+ 总打印数值的正负号
- 左对齐
# 备用格式
‘ ’ 空格留白
0 填充前导零而非空格

宽度标识符

  • 宽度会通过紧跟在%后的十进制数指定,若未指定除必需外不作填充。
  • 精度可选,通过宽度后跟.点号后跟的十进制数指定,若未指定值使用默认。
  • 若点号后没跟数字则表示精度未0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,722评论 1 9
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,538评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,605评论 2 9
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,190评论 4 8