03-数据类型

go语言

一 数据类型分类

值类型:基本数据类型是Go语言实际的原子,复合数据类型是由不同的方式组合基本类型构造出来的数据类型,如:数组,slice,map,结构体

整型    int8,uint               # 基础类型之数字类型
浮点型 float32,float64 # 基础类型之数字类型
复数 # 基础类型之数字类型
布尔型 bool # 基础类型,只能存true/false,占据1个字节,不能转换为整型,0和1也不能转换为布尔
字符串 string # 基础类型
数组 # 复合类型
结构体 struct

引用类型:即保存的是对程序中一个变量的或状态的间接引用,对其修改将影响所有该引用的拷贝

指针    *
切片 slice
字典 map
函数 func
管道 chan
接口 interface

贴士:Go语言没有字符型,可以使用byte来保存单个字母

二 零值机制

Go变量初始化会自带默认值,不像其他语言为空,下面列出各种数据类型对应的0值:

int     0
int8 0
int32 0
int64 0
uint 0x0
rune 0 //rune的实际类型是 int32
byte 0x0 // byte的实际类型是 uint8
float32 0 //长度为 4 byte
float64 0 //长度为 8 byte
bool false
string ""

三 格式化输出

常用格式化输出:

%%    %字面量
%b 二进制整数值,基数为2,或者是一个科学记数法表示的指数为2的浮点数
%c 该值对应的unicode字符
%d 十进制数值,基数为10
%e 科学记数法e表示的浮点或者复数
%E 科学记数法E表示的浮点或者附属
%f 标准计数法表示的浮点或者附属
%o 8进制度
%p 十六进制表示的一个地址值
%s 输出字符串或字节数组
%T 输出值的类型,注意int32和int是两种不同的类型,编译器不会自动转换,需要类型转换。
%v 值的默认格式表示
%+v 类似%v,但输出结构体时会添加字段名
%#v 值的Go语法表示
%t 单词true或false
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于"U+%04X"

示例:

type User struct {
Name string
Age int
}
user : = User{
"overnote",
1,
}
fmt.Printf("%%\n") // %
fmt.Printf("%b\n", 16) // 10000
fmt.Printf("%c\n", 65) // A
fmt.Printf("%c\n", 0x4f60) // 你
fmt.Printf("%U\n", '你') // U+4f60
fmt.Printf("%x\n", '你') // 4f60
fmt.Printf("%X\n", '你') // 4F60
fmt.Printf("%d\n", 'A') // 65
fmt.Printf("%t\n", 1 > 2) // false
fmt.Printf("%e\n", 4396.7777777) // 4.396778e+03 默认精度6位
fmt.Printf("%20.3e\n", 4396.7777777) // 4.397e+03 设置宽度20,精度3,宽度一般用于对齐
fmt.Printf("%E\n", 4396.7777777) // 4.396778E+03
fmt.Printf("%f\n", 4396.7777777) // 4396.777778
fmt.Printf("%o\n", 16) // 20
fmt.Printf("%p\n", []int{1}) // 0xc000016110
fmt.Printf("Hello %s\n", "World") // Hello World
fmt.Printf("Hello %q\n", "World") // Hello "World"
fmt.Printf("%T\n", 3.0) // float64
fmt.Printf("%v\n", user) // {overnote 1}
fmt.Printf("%+v\n", user) // {Name:overnote Age:1}
fmt.Printf("%#v\n", user) // main.User{Name:"overnote", Age:1}