GolangPrintf,Sprintf,Fprintf格式化详解
1.`Sprintf` 则格式化并返回⼀个字符串⽽不带任何输出。
s := fmt.Sprintf("是字符串 %s ","string")
2. fmt.Println(s) // 是字符串 %s 对应是字符串 string
3.可以使⽤ `Fprintf` 来格式化并输出
fmt.Fprintf(os.Stderr, "格式化 %s\n", "error")
顺带说⼀下格式化的符号:
/*
%v 输出结构体 {10 30}
%+v 输出结构体显⽰字段名 {one:10 tow:30}
%#v 输出结构体源代码⽚段 main.Point{one:10, tow:30}
%T 输出值的类型  main.Point
%t 输出格式化布尔值  true
printf怎么格式化输出
%d`输出标准的⼗进制格式化 100
%b`输出标准的⼆进制格式化 99 对应 1100011
%c`输出定整数的对应字符 99 对应 c
%x`输出⼗六进制编码 99 对应 63
%f`输出⼗进制格式化 99 对应 63
%e`输出科学技科学记数法表⽰形式 123400000.0 对应 1.234000e+08
%E`输出科学技科学记数法表⽰形式 123400000.0 对应 1.234000e+08
%s 进⾏基本的字符串输出 "\"string\"" 对应 "string"
%q 源代码中那样带有双引号的输出 "\"string\"" 对应 "\"string\""
%p 输出⼀个指针的值 &jgt 对应 0xc00004a090
% 后⾯使⽤数字来控制输出宽度默认结果使⽤右对齐并且通过空格来填充空⽩部分
%2.2f 指定浮点型的输出宽度 1.2 对应 1.20
%*2.2f 指定浮点型的输出宽度对齐,使⽤ `-` 标志 1.2 对应 *1.20
*/
jgt := Point{10,30}
fmt.Printf("%v\n",jgt)  // {10 30}
fmt.Printf("%+v\n",jgt)  // {one:10 tow:30}
fmt.Printf("%#v\n",jgt)  // main.Point{one:10, tow:30}
fmt.Printf("%T\n",jgt)  // main.Point
fmt.Printf("%t\n",true) // true
fmt.Printf("%d\n",100)  // 100
fmt.Printf("%b\n",99)  // 99 对应 1100011
fmt.Printf("%c\n",99)  // 99 对应 c
fmt.Printf("%x\n",99)  // 99 对应 63
fmt.Printf("%f\n",99.9)  // 99.9 对应 99.900000
fmt.Printf("%e\n",123400000.0)  // 123400000.0 对应 1.234000e+08
fmt.Printf("%E\n",123400000.0)  // 123400000.0 对应 1.234000e+08
fmt.Printf("%s\n","\"string\"") // "\"string\"" 对应 "string"
fmt.Printf("%q\n","\"string\"") // "\"string\"" 对应 "string"
fmt.Printf("%p\n",&jgt)    // &jgt 对应 0xc00004a090
fmt.Printf("%6d\n",8)    // &jgt 对应 0xc00004a090
fmt.Printf("%2.2f\n",1.2 )    // 1.2 对应 1.20
fmt.Printf("*%2.2f\n",1.2 )    // 1.2 对应 *1.20
补充:Go 学习笔记:Println 与 Printf 的区别,以及 Printf 的详细⽤法
Println 与Printf 都是fmt 包中的公共⽅法,在需要打印信息时需要⽤到这⼆个函数,那么这⼆个函数有什么区别呢?Println:可以打印出字符串,和变量
Printf :只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整形
也就是说,当需要格式化输出信息时⼀般选择 Printf,其他时候⽤ Println 就可以了,⽐如:
a := 10
fmt.Println(a)  //right
fmt.Println("abc")  //right
fmt.Printf("%d",a)  //right
fmt.Printf(a)  //error
Printf 详细⽤法
Printf 在使⽤时需要给它指定⼀个格式化规则,即第⼀个参数,那么⼀共有多少种格式呢,⽤的时候需要怎么写呢?package main
import "fmt"
import "os"
type point struct {
x, y int
}
func main() {
//Go 为常规 Go 值的格式化设计提供了多种打印⽅式。例如,这⾥打印了 point 结构体的⼀个实例。
p := point{1, 2}
fmt.Printf("%v\n", p) // {1 2}
//如果值是⼀个结构体,%+v 的格式化输出内容将包括结构体的字段名。
fmt.Printf("%+v\n", p) // {x:1 y:2}
//%#v 形式则输出这个值的 Go 语法表⽰。例如,值的运⾏源代码⽚段。
fmt.Printf("%#v\n", p) // main.point{x:1, y:2}
//需要打印值的类型,使⽤ %T。
fmt.Printf("%T\n", p) // main.point
//格式化布尔值是简单的。
fmt.Printf("%t\n", true)
//格式化整形数有多种⽅式,使⽤ %d进⾏标准的⼗进制格式化。
fmt.Printf("%d\n", 123)
//这个输出⼆进制表⽰形式。
fmt.Printf("%b\n", 14)
//这个输出给定整数的对应字符。
fmt.Printf("%c\n", 33)
//%x 提供⼗六进制编码。
fmt.Printf("%x\n", 456)
//对于浮点型同样有很多的格式化选项。使⽤ %f 进⾏最基本的⼗进制格式化。
fmt.Printf("%f\n", 78.9)
//%e 和 %E 将浮点型格式化为(稍微有⼀点不同的)科学技科学记数法表⽰形式。
fmt.Printf("%e\n", 123400000.0)
fmt.Printf("%E\n", 123400000.0)
//使⽤ %s 进⾏基本的字符串输出。
fmt.Printf("%s\n", "\"string\"")
//像 Go 源代码中那样带有双引号的输出,使⽤ %q。
fmt.Printf("%q\n", "\"string\"")
//和上⾯的整形数⼀样,%x 输出使⽤ base-16 编码的字符串,每个字节使⽤ 2 个字符表⽰。
fmt.Printf("%x\n", "hex this")
//要输出⼀个指针的值,使⽤ %p。
fmt.Printf("%p\n", &p)
//当输出数字的时候,你将经常想要控制输出结果的宽度和精度,可以使⽤在 % 后⾯使⽤数字来控制输出宽度。默认结果使⽤右对齐并且通过空格来填充空⽩部分。 fmt.Printf("|%6d|%6d|\n", 12, 345)
//你也可以指定浮点型的输出宽度,同时也可以通过宽度.精度的语法来指定输出的精度。
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
//要最对齐,使⽤ - 标志。
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
//你也许也想控制字符串输出时的宽度,特别是要确保他们在类表格输出时的对齐。这是基本的右对齐宽度表⽰。
fmt.Printf("|%6s|%6s|\n", "foo", "b")
//要左对齐,和数字⼀样,使⽤ - 标志。
fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
//到⽬前为⽌,我们已经看过 Printf了,它通过 os.Stdout输出格式化的字符串。Sprintf 则格式化并返回⼀个字符串⽽不带任何输出。
s := fmt.Sprintf("a %s", "string")
fmt.Println(s)
//你可以使⽤ Fprintf 来格式化并输出到 io.Writers⽽不是 os.Stdout。
fmt.Fprintf(os.Stderr, "an %s\n", "error")
}
可以看到,这种类还是挺多的,但平时经常⽤的也就前⾯⼏种⽽已,或者可以说,⽤的最多的就是第⼀个
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。