Golang的格式化输出fmt.Printf

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\n", a, a)
	fmt.Printf("%T,%f\n", b, b)
	fmt.Printf("%T,%t\n", c, c)
	fmt.Printf("%T,%s\n", d, d)
	fmt.Printf("%T,%s\n", e, e)
	fmt.Printf("%T,%d,%c\n", f, f, f)
	fmt.Println("-----------------------")
	fmt.Printf("%v\n", a)
	fmt.Printf("%v\n", b)
	fmt.Printf("%v\n", c)
	fmt.Printf("%v\n", d)
	fmt.Printf("%v\n", e)
	fmt.Printf("%v\n", 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\n",p)    // {1 2}
     
    fmt.Printf("%+v\n",p)   // {x:1 y:2}
     
    fmt.Printf("%#v\n",p)   // main.point{x:1, y:2}
 
    //输出类型
    fmt.Printf("%T\n",p)    // main.point
 
    //输出函数签名
    fmt.Printf("%T\n",test) //func(int ,int) int
 
    //输出bool值
    flag := true
    fmt.Printf("%t\n",flag) // true
     
    //尝试将一个字符串作为参数来输出bool值,不要尝试这样做
    fmt.Printf("%t\n","true") //%!t(string=true)  
     
    //输出十进制形式输出
    fmt.Printf("%d\n",123)      // 123
     
    //输出一个字符,参数对应ASCII码
    fmt.Printf("%c\n",98)       // b
     
    //输出一个整数的二进制形式的值
    fmt.Printf("%b\n",98)       // 1100010
 
    //输出一个字符的二进制形式的值
    fmt.Printf("%b\n",'b')      // 1100010
 
    //如果参数是数字,则以十六进制形式输出
    fmt.Printf("%x\n",456)      // 1c8
     
    //如果参数是字符串,则打印字符串的每一个字符的ASCII码
    fmt.Printf("%x\n","hex this") // 6865782074686973 
     
    //浮点数形式输出,注意小数位数为6位
    fmt.Printf("%f\n",78.53)    // 78.530000   
     
    //注意这里前后不对应,不会报错,但是不会自动转换
    fmt.Printf("%d\n",78.53)    // %!d(float64=78.53)
     
    //科学计数法的形式,注意参数要为小数,不为小数,可以乘1.0
    fmt.Printf("%e\n",123400000000.0)   //1.234000e+11 注意参数为小数
     
    //科学计数法的形式,注意参数要为小数,不为小数,可以乘1.0
    fmt.Printf("%E\n",123000000000.0)   //1.234000E+11
     
    //输出字符串
    fmt.Printf("%s\n","\"ddadjfaskdafjasfsaf")  //"ddadjfaskdafjasfsaf
     
    //保留字符串两端的双引号
    fmt.Printf("%q\n","\"dddddddd\"")   // "\"dddddddd\""
     
    //输出指针(地址)的值
    fmt.Printf("%p\n",&p) //0xc420012090
     
    //最小宽度为6,默认右对齐,不足6位时,空格补全,超过6位时,不会截断
    fmt.Printf("|%6d|%6d|\n",12,1234567) // |    12|1234567|
     
    //最小6个宽度(包含小数点),2位小数,超过6位时,不会截断
    fmt.Printf("|%6.2f|%6.2f|\n",12,222.333) // |%!f(int=    12)|222.33|
     
    //使用 - 表示左对齐
    fmt.Printf("|%-6.2f|%-6.2f|\n",12.2,3.33) //|12.20 |3.33  |   
     
    //最小6个宽度,右对齐,不足6个时,空格补齐,超过6位时,不会截断
    fmt.Printf("|%6s|%6s|\n","foo","abcdefgg") //|   foo|abcdefgg|
     
    ////最小6个宽度,右对齐,不足6个时,空格补齐,超过6位时,不会截断
    fmt.Printf("|%-6s|%-6s|\n","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 \n", 18, 11, 12, 18, 18) //18 b C 22 10010

	//打印浮点数 .2f保留小数点后2位
	fmt.Printf("%.2f\n", 18.1) //18.10

	//打印bool型 布尔值
	fmt.Printf("%t\n", true) // true

	// 打印字符
	fmt.Printf("%c\n", 65) //  A

	// 输入字符串 %q带号字符串
	fmt.Printf("%s  %q \n", "您好", "您好") //  您好  "您好"

	// 内置格式 原样输出
	fmt.Printf("%v \n", "您好") //  您好

	// 类型
	fmt.Printf("%T \n", "您好") //  string

	//内存地址
	i := 5
	fmt.Printf("%p \n", i) // %!p(int=5)
	fmt.Printf("%p \n", &i) // 0xc0000100d0

	//输出%  要用两个%
	fmt.Printf("花费%d%%总钱数\n",50) //花费50%总钱数

	//换行和缩进
	fmt.Printf("你好吗?\n\t我很\t好!")
	//你好吗?
	//		我很		好!
}

posted @ 2019-10-09 10:29  HaimaBlog  阅读(3561)  评论(0编辑  收藏  举报