golang fmt包Printf函數測試實例

package main

import (
        "fmt"
)

//整數
func intPrintf() {
        var a int = 162
        fmt.Println("----------")
        fmt.Println("整數類型")
        // %b 表示爲二進制
        fmt.Printf("表示爲二進制%b\n", a)
        // %d 表示爲10進制
        fmt.Printf("表示爲十進制%d\n", a)
        // %o 表示爲八進制
        fmt.Printf("表示爲八進制%o\n", a)
        // %x 表示爲16進制 使用a-f
        fmt.Printf("表示爲十六進制%x\n", a)
        // %X 表示爲16進制 使用A-F
        fmt.Printf("表示爲十六進制%X\n", a)
        //%c  表示爲unicode碼
        //同C語言%c不同的是c語言用來輸出符合ansi碼的,GO語言輸出範圍更廣
        fmt.Printf("表示爲unicode碼值%c\n", a)
        //%U 表示爲unicode格式
        fmt.Printf("表示爲Unicode格式%U\n", a)
        //%q 轉化成GO語法字符字面值 即對應的碼值加上單引號
        fmt.Printf("表示爲字符字面值%q\n", a)
}

func pointPrintf() {
        fmt.Println("---------")
        fmt.Println("指針類型")
        var a int = 10
        // %p 十六位進制的指針地址
        fmt.Printf("指針地址%%p格式%p\n", &a)
}
func boolPrintf() {
        fmt.Println("---------")
        fmt.Println("布爾類型")
        var a bool = true
        //%t  布爾類型
        fmt.Printf("布爾類型%%t格式%t\n", a)
}
func stringPrintf() {
        fmt.Println("---------")
        fmt.Println("字符串類型")
        s_value := "string"
        b_value := []byte("byte")
        //%s 直接輸出字符串或者[]byte
        fmt.Printf("字符串%%s格式%s\n", s_value)
        fmt.Printf("[]byte%%s格式%s\n", b_value)
        //%q 輸出爲GO字符字面值
        fmt.Printf("字符串%%q格式%q\n", s_value)
        //%x 每個字節用兩字符十六進制數表示(使用a-f)
        fmt.Printf("字符串%%x格式%x\n", s_value)
        //%X 每個字節用兩字符十六進制數表示(使用A-F)
        fmt.Printf("字符串%%X格式%X\n", s_value)
}



func floatPrintf() {
        fmt.Println("---------")
        fmt.Println("浮點數")
        f := 123456.123456
        // %f 默認寬度,默認精度
        fmt.Printf("%%f格式%f\n", f)
        // %5f 寬度爲5,默認精度
        fmt.Printf("%%5f格式%5f\n", f)
        //.2f  默認寬度,精度2
        fmt.Printf("%%.2f格式%.2f\n", f)
        //%5.2 寬度爲5,精度爲2
        fmt.Printf("%%5.2格式%5.2f\n", f)
        //%5.f 寬度爲5, 精度爲0
        fmt.Printf("%%5.f格式%5.f\n", f)
}

type people struct {
        name string
        age  int
}

func commonPrintf() {
        fmt.Println("---------")
        fmt.Println("通用類型")
        //初始化各類型變量
        var i int = 1
        var f32 float32 = 32.32
        var f64 float64 = 64.64
        var s string = "string"
        var b bool = true
        var ary [3]int = [3]int{1, 2, 3}
        var slice []int = []int{1, 2, 3}
        var byteValue []byte = []byte("byte")
        var mapValue map[string]string = map[string]string{
                "key": "value",
        }
        var p people = people{name: "test", age: 1}
        //%v  值的默認格式表示
        fmt.Println("----------")
        fmt.Println("%v")
        fmt.Printf("int類型%%v格式%v\n", i)
        fmt.Printf("float32類型%%v格式%v\n", f32)
        fmt.Printf("float64類型%%v格式%v\n", f64)
        fmt.Printf("string類型%%v格式%v\n", s)
        fmt.Printf("bool類型%%v格式%v\n", b)
        fmt.Printf("數組類型%%v格式%v\n", ary)
        fmt.Printf("切片類型%%v格式%v\n", slice)
        fmt.Printf("map類型%%v格式%v\n", mapValue)
        fmt.Printf("[]byte類型%%v格式%v\n", byteValue)
        fmt.Printf("結構體類型%%v格式%v\n", p)
        //%+v 和%v唯一的區別在輸出結構體時會輸出字段名
        fmt.Println("----------")
        fmt.Println("%+v")
        fmt.Printf("結構體類型%%+v格式%+v\n", p)
        //%#v 值的GO語法表示(和%v相比在輸出複合類型時,會輸出類型的信息)
        fmt.Println("----------")
        fmt.Println("%#v")
        fmt.Printf("int類型%%#v格式%#v\n", i)
        fmt.Printf("float32類型%%#v格式%#v\n", f32)
        fmt.Printf("float64類型%%#v格式%#v\n", f64)
        fmt.Printf("string類型%%#v格式%#v\n", s)
        fmt.Printf("bool類型%%#v格式%#v\n", b)
        fmt.Printf("數組類型%%#v格式%#v\n", ary)
        fmt.Printf("切片類型%%#v格式%#v\n", slice)
        fmt.Printf("map類型%%#v格式%#v\n", mapValue)
        fmt.Printf("[]byte類型%%#v格式%#v\n", byteValue)
        fmt.Printf("結構體類型%%#v格式%#v\n", p)
        //%T 值的類型GO語法表示
        fmt.Println("----------")
        fmt.Println("%T")
        fmt.Printf("int類型%%T格式%T\n", i)
        fmt.Printf("float32類型%%T格式%T\n", f32)
        fmt.Printf("float64類型%%T格式%T\n", f64)
        fmt.Printf("string類型%%T格式%T\n", s)
        fmt.Printf("bool類型%%T格式%T\n", b)
        fmt.Printf("數組類型%%T格式%T\n", ary)
        fmt.Printf("切片類型%%T格式%T\n", slice)
        fmt.Printf("map類型%%T格式%T\n", mapValue)
        fmt.Printf("[]byte類型%%T格式%T\n", byteValue)
        fmt.Printf("結構體類型%%T格式%T\n", p)

}

func main() {
        intPrintf()
        pointPrintf()
        boolPrintf()
        stringPrintf()
        floatPrintf()
        commonPrintf()

}

輸出結果:

----------
整數類型
表示爲二進制10100010
表示爲十進制162
表示爲八進制242
表示爲十六進制a2
表示爲十六進制A2
表示爲unicode碼值¢
表示爲Unicode格式U+00A2
表示爲字符字面值'¢'
---------
指針類型
指針地址%p格式0xc42000e2f0
---------
布爾類型
布爾類型%t格式true
---------
字符串類型
字符串%s格式string
[]byte%s格式byte
字符串%q格式"string"
字符串%x格式737472696e67
字符串%X格式737472696E67

---------
浮點數
%f格式123456.123456
%5f格式123456.123456
%.2f格式123456.12
%5.2格式123456.12
%5.f格式123456
---------
通用類型
----------
%v
int類型%v格式1
float32類型%v格式32.32
float64類型%v格式64.64
string類型%v格式string
bool類型%v格式true
數組類型%v格式[1 2 3]
切片類型%v格式[1 2 3]
map類型%v格式map[key:value]
[]byte類型%v格式[98 121 116 101]
結構體類型%v格式{test 1}
----------
%+v
結構體類型%+v格式{name:test age:1}
----------
%#v
int類型%#v格式1
float32類型%#v格式32.32
float64類型%#v格式64.64
string類型%#v格式"string"
bool類型%#v格式true
數組類型%#v格式[3]int{1, 2, 3}
切片類型%#v格式[]int{1, 2, 3}
map類型%#v格式map[string]string{"key":"value"}
[]byte類型%#v格式[]byte{0x62, 0x79, 0x74, 0x65}
結構體類型%#v格式main.people{name:"test", age:1}
----------
%T
int類型%T格式int
float32類型%T格式float32
float64類型%T格式float64
string類型%T格式string
bool類型%T格式bool
數組類型%T格式[3]int
切片類型%T格式[]int
map類型%T格式map[string]string
[]byte類型%T格式[]uint8
結構體類型%T格式main.people
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章