Go 语言fmt 标准库格式化输出说明
Posted 沛沛老爹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 语言fmt 标准库格式化输出说明相关的知识,希望对你有一定的参考价值。
Go 语言的格式化输出。
不论变量的类型是什么,fmt.Printf 函数都支持以下通用的输出格式。
通用的格式化输出
- %v,以默认的格式输出它的值。类型不同,默认格式也不同。
- %#v,以 Go 的语法格式输出它的值。
- %T,以 Go 的语法格式输出它的类型。
- %%,输出百分号。
更多的可以查看源码(说真的,看源码可以省下很多时间),fmt中根据类型不同重写了很多针对的函数。
源码
源码位置
代码都是按照fmt[类型]来进行设置的。
bool 格式化
func (p *pp) fmtBool(v bool, verb rune)
switch verb
case 't', 'v':
p.fmt.fmtBoolean(v)
default:
p.badVerb(verb)
uint64格式化
func (p *pp) fmt0x64(v uint64, leading0x bool)
sharp := p.fmt.sharp
p.fmt.sharp = leading0x
p.fmt.fmtInteger(v, 16, unsigned, 'v', ldigits)
p.fmt.sharp = sharp
Int
// fmtInteger formats a signed or unsigned integer.
func (p *pp) fmtInteger(v uint64, isSigned bool, verb rune)
switch verb
case 'v':
if p.fmt.sharpV && !isSigned
p.fmt0x64(v, true)
else
p.fmt.fmtInteger(v, 10, isSigned, verb, ldigits)
case 'd':
p.fmt.fmtInteger(v, 10, isSigned, verb, ldigits)
case 'b':
p.fmt.fmtInteger(v, 2, isSigned, verb, ldigits)
case 'o', 'O':
p.fmt.fmtInteger(v, 8, isSigned, verb, ldigits)
case 'x':
p.fmt.fmtInteger(v, 16, isSigned, verb, ldigits)
case 'X':
p.fmt.fmtInteger(v, 16, isSigned, verb, udigits)
case 'c':
p.fmt.fmtC(v)
case 'q':
p.fmt.fmtQc(v)
case 'U':
p.fmt.fmtUnicode(v)
default:
p.badVerb(verb)
float
func (p *pp) fmtFloat(v float64, size int, verb rune)
switch verb
case 'v':
p.fmt.fmtFloat(v, size, 'g', -1)
case 'b', 'g', 'G', 'x', 'X':
p.fmt.fmtFloat(v, size, verb, -1)
case 'f', 'e', 'E':
p.fmt.fmtFloat(v, size, verb, 6)
case 'F':
p.fmt.fmtFloat(v, size, 'f', 6)
default:
p.badVerb(verb)
Complex
func (p *pp) fmtComplex(v complex128, size int, verb rune)
// Make sure any unsupported verbs are found before the
// calls to fmtFloat to not generate an incorrect error string.
switch verb
case 'v', 'b', 'g', 'G', 'x', 'X', 'f', 'F', 'e', 'E':
oldPlus := p.fmt.plus
p.buf.writeByte('(')
p.fmtFloat(real(v), size/2, verb)
// Imaginary part always has a sign.
p.fmt.plus = true
p.fmtFloat(imag(v), size/2, verb)
p.buf.writeString("i)")
p.fmt.plus = oldPlus
default:
p.badVerb(verb)
string
func (p *pp) fmtString(v string, verb rune)
switch verb
case 'v':
if p.fmt.sharpV
p.fmt.fmtQ(v)
else
p.fmt.fmtS(v)
case 's':
p.fmt.fmtS(v)
case 'x':
p.fmt.fmtSx(v, ldigits)
case 'X':
p.fmt.fmtSx(v, udigits)
case 'q':
p.fmt.fmtQ(v)
default:
p.badVerb(verb)
… 还有更多的类型都是按照这种格式进行格式化的。
总结
- 通用的格式输出可以使用%的方式来输出。 T代表Type;v 代表value。
- 非通用的可以使用对应基础类型格式化函数。通用格式fmt[Type]。
以上是关于Go 语言fmt 标准库格式化输出说明的主要内容,如果未能解决你的问题,请参考以下文章