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好!")
//你好嗎?
// 我很 好!
}