package main
import("fmt""os")funcmain(){
name :="ky"// 将格式化后的字符串输出给文件, f 为文件句柄
fmt.Fprintf(f,"%v\n", name)// 将格式化的字符串输出到终端, 将文件句柄固定为os.stdout
fmt.Printf("%v\n", name)// 将格式化后的字符串返回
a := fmt.Sprintf("my name is %v", name)}
源码
// Fprintf formats according to a format specifier and writes to w.// It returns the number of bytes written and any write error encountered.funcFprintf(w io.Writer, format string, a ...interface{})(n int, err error){
p :=newPrinter()
p.doPrintf(format, a)
n, err = w.Write(p.buf)
p.free()return}// Printf formats according to a format specifier and writes to standard output.// It returns the number of bytes written and any write error encountered.funcPrintf(format string, a ...interface{})(n int, err error){returnFprintf(os.Stdout, format, a...)}// Sprintf formats according to a format specifier and returns the resulting string.funcSprintf(format string, a ...interface{})string{
p :=newPrinter()
p.doPrintf(format, a)
s :=string(p.buf)
p.free()return s
}
格式化参数
package main
import"fmt"funcmain(){// %v 通用
num :=18
fmt.Printf("%v\n", num)// 18// %T 打印类型
fmt.Printf("%T\n" num)// int// 指针
fmt.Printf("%p\n",&s1)// 带0x的指针
fmt.Printf("%#p\n",&s1)// 不带0x的指针// %% 百分号
fmt.Printf("%d%%\n", num)// 95%// 打印进制
b :=15// %b 二进制, %d 十进制, %o 八进制, %x 十六进制
fmt.Printf("%[1]b %[1]d %[1]o %[1]x\n", b)// 布尔值
m :=true
fmt.Printf("%t\n", m)// 支持索引使用
m :="a"
n :="b"// 直接使用索引
fmt.Printf("%[1]v,%[1]v,%[1]v,%[2]v\n", m, n)// a,a,a,b// 重新使用索引1后, 后边的顺序会重置
fmt.Printf("%v,%v,%[1]v,%v\n", m, n)// }
int和float 相关用法
package main
import"fmt"funcmain(){// 带符号的整型
a :=+15
b :=-15
fmt.Printf("%+d, %+d\n", a, b)// +15, -15, 类型都为int// 指定长度的整型
fmt.Printf("|%5d|\n", a)// | 1|, 共5位, 默认右对齐
fmt.Printf("|%-5d|\n", a)// |1 |, 共5位, 左对齐
fmt.Printf("|%05d|\n", a)// |00001|, 共5位, 在前边补0// 特殊用法
m :=123
n :=5
fmt.Printf("%[1]*[2]d\n", a, pi)// 总宽度为5, 结果为 123(左数2个空格)// %f
x :=3.1415926
y :=3.14
fmt.Printf("%f, %f\n", x, y)// 3.141593 3.140000 默认保留6位小数, 会四舍五入
fmt.Printf("%5.f\n", x)// 视为%5.0f, 总宽度为5, 小数点后保留0位, 结果为 3(左数4个空格)
fmt.Printf("%5.2f\n", x)// 总宽度为5, 小数点后保留2位, 结果为 3.14(左数一个空格)
fmt.Printf("%.3f\n", x)// 保留3位小数
fmt.Printf("%.2g\n", x)// 共出现两个数字// 特殊用法
fmt.Printf("%[1]*.[2]*[3]f\n",5,1, x)// 等同于 %5.1f, 由于使用了索引, 使用[]*区分, [num]* 表示宽度或者精度}