Golang的格式化输出 和 C语言的标准输出基本一样,但是增加了一些针对Golang语言的特有数据结构的格式化输出方式。
格式化打印中的常用占位符:
格式化打印占位符:
%v,原样输出
%T,打印类型
%t,bool类型
%s,字符串
%f,浮点
%.2f 保留2位小数点
%d,10进制的整数
%b,2进制的整数
%o,8进制
%x,%X,16进制
%x:0-9,a-f
%X:0-9,A-F
%c,打印字符
%p,打印地址
。。。
示例代码:
package main
import (
"fmt"
)
func main() {
a := 100 //int
b := 3.14 //float64
c := true // bool
d := "Hello World" //string
e := `Ruby` //string
f := 'A'
fmt.Printf("%T,%b
", a, a)
fmt.Printf("%T,%f
", b, b)
fmt.Printf("%T,%t
", c, c)
fmt.Printf("%T,%s
", d, d)
fmt.Printf("%T,%s
", e, e)
fmt.Printf("%T,%d,%c
", f, f, f)
fmt.Println("-----------------------")
fmt.Printf("%v
", a)
fmt.Printf("%v
", b)
fmt.Printf("%v
", c)
fmt.Printf("%v
", d)
fmt.Printf("%v
", e)
fmt.Printf("%v
", f)
var balance = [5]float32{1000.2,2.4,3.4,7.0,50.7}
balance[2] = 80.0
fmt.Printf("%T,%.2f",balance[2],balance[2]) //float32,80.00
}
运行结果:
以下就是实例:
package main
import "fmt" //一定不要忘了
type point struct{
x,y int
}
func test(i , j int) int{ return i+j;}
func main(){
p := point{1,2}
fmt.Printf("%d
",p) // {1 2}
fmt.Printf("%+v
",p) // {x:1 y:2}
fmt.Printf("%#v
",p) // main.point{x:1, y:2}
//输出类型
fmt.Printf("%T
",p) // main.point
//输出函数签名
fmt.Printf("%T
",test) //func(int ,int) int
//输出bool值
flag := true
fmt.Printf("%t
",flag) // true
//尝试将一个字符串作为参数来输出bool值,不要尝试这样做
fmt.Printf("%t
","true") //%!t(string=true)
//输出十进制形式输出
fmt.Printf("%d
",123) // 123
//输出一个字符,参数对应ASCII码
fmt.Printf("%c
",98) // b
//输出一个整数的二进制形式的值
fmt.Printf("%b
",98) // 1100010
//输出一个字符的二进制形式的值
fmt.Printf("%b
",'b') // 1100010
//如果参数是数字,则以十六进制形式输出
fmt.Printf("%x
",456) // 1c8
//如果参数是字符串,则打印字符串的每一个字符的ASCII码
fmt.Printf("%x
","hex this") // 6865782074686973
//浮点数形式输出,注意小数位数为6位
fmt.Printf("%f
",78.53) // 78.530000
//注意这里前后不对应,不会报错,但是不会自动转换
fmt.Printf("%d
",78.53) // %!d(float64=78.53)
//科学计数法的形式,注意参数要为小数,不为小数,可以乘1.0
fmt.Printf("%e
",123400000000.0) //1.234000e+11 注意参数为小数
//科学计数法的形式,注意参数要为小数,不为小数,可以乘1.0
fmt.Printf("%E
",123000000000.0) //1.234000E+11
//输出字符串
fmt.Printf("%s
",""ddadjfaskdafjasfsaf") //"ddadjfaskdafjasfsaf
//保留字符串两端的双引号
fmt.Printf("%q
",""dddddddd"") // ""dddddddd""
//输出指针(地址)的值
fmt.Printf("%p
",&p) //0xc420012090
//最小宽度为6,默认右对齐,不足6位时,空格补全,超过6位时,不会截断
fmt.Printf("|%6d|%6d|
",12,1234567) // | 12|1234567|
//最小6个宽度(包含小数点),2位小数,超过6位时,不会截断
fmt.Printf("|%6.2f|%6.2f|
",12,222.333) // |%!f(int= 12)|222.33|
//使用 - 表示左对齐
fmt.Printf("|%-6.2f|%-6.2f|
",12.2,3.33) //|12.20 |3.33 |
//最小6个宽度,右对齐,不足6个时,空格补齐,超过6位时,不会截断
fmt.Printf("|%6s|%6s|
","foo","abcdefgg") //| foo|abcdefgg|
////最小6个宽度,右对齐,不足6个时,空格补齐,超过6位时,不会截断
fmt.Printf("|%-6s|%-6s|
","foo","abcdeefgth") //|foo |abcdeefgth|
//不会输出内容,相反,会将内容以字符串的形式返回
s:= fmt.Sprintf("a %s","string")
fmt.Println(s) //a string
}
package main
import "fmt"
func main() {
//大小写的方式显示十六进制整数
fmt.Printf("%d %x %X %o %b
", 18, 11, 12, 18, 18) //18 b C 22 10010
//打印浮点数 .2f保留小数点后2位
fmt.Printf("%.2f
", 18.1) //18.10
//打印bool型 布尔值
fmt.Printf("%t
", true) // true
// 打印字符
fmt.Printf("%c
", 65) // A
// 输入字符串 %q带号字符串
fmt.Printf("%s %q
", "您好", "您好") // 您好 "您好"
// 内置格式 原样输出
fmt.Printf("%v
", "您好") // 您好
// 类型
fmt.Printf("%T
", "您好") // string
//内存地址
i := 5
fmt.Printf("%p
", i) // %!p(int=5)
fmt.Printf("%p
", &i) // 0xc0000100d0
//输出% 要用两个%
fmt.Printf("花费%d%%总钱数
",50) //花费50%总钱数
//换行和缩进
fmt.Printf("你好吗?
我很 好!")
//你好吗?
// 我很 好!
}