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