• 整数型
  • 浮点型
  • 复数
  • 布尔
  • 字符串

整数型

go
var n1 uint8 = 2
var n2 uint16 = 2
var n3 uint32 = 2
var n4 uint64 = 2
var n5 uint = 2
var n6 int8 = 2
var n7 int16 = 2
var n8 int32 = 2
var n9 int64 = 2
var n10 int = 2
  1. 默认的数字定义类型是 int 类型
  2. 带个 u 就是无符号,只能存正整数
  3. 后面的数字就是 2 进制的位数
  4. uint8 还有一个别名 byte, 一个字节=8 个 bit 位
  5. int 类型的大小取决于所使用的平台

怎么看 uintX 最大位数

例:

go
var u8 uint8 = 255

八位二进制最小:

00000000=0

八位二进制最小:

11111111=2^8-1=255

浮点型

  • float32
  • float64

如果没有显式声明,则默认是 float64

字符型

关键字''

  • 单字节:byte
  • 多字节:rune
go
// 单字节
var a byte = 'a' // ascii里面的字符
fmt.Printf("%c %d\n", a, a)
var a1 uint8 = 97
fmt.Printf("%c %d\n", a1, a1)
a 97
a 97
go
type byte = uint8
go
var z rune = '中'
fmt.Printf("%c %d\n", z, z)
中 20013

字符串

关键字""

一些常用的转义字符

go
fmt.Println("hello\tworld") // 制表符
fmt.Println("hello\nworld") // 回车
fmt.Println("\"hello\"world") // 双引号
fmt.Println("hello\rworld") // 回到行首
fmt.Println("C:\\pprof\\main.exe") // 反斜杠
hello world
hello
world
"hello"world
world
C:\pprof\main.exe

多行字符

··

go
fmt.Println(`hello
world`)
hello
world

布尔

布尔变量默认为 false

Go 中不允许将整形强制转换为布尔型

布尔无法参与数值运算,也无法与其他类型进行转换

零值问题

基本数据类型只声明不赋值

那么这个变量的值就是对应类型的零值,例如 int 就是 0,bool 就是 false,字符串就是““

go
var a1 int
var a2 float32
var a3 string
var a4 bool
fmt.Printf("%#v\n", a1)
fmt.Printf("%#v\n", a2)
fmt.Printf("%#v\n", a3)
fmt.Printf("%#v\n", a4)
0
0
""
false

数组

go
var nameList [3]string = [3]string{"张三", "李四", "王五"}

Go 不支持逆向索引

字符长度的方法

go
fmt.Println(len(nameList))

不能添加元素

切片

go
var nameList []string
nameList = append(nameList, "张三")
nameList = append(nameList, "李四")

只能同类型

初始化的问题

go
var nameList []string
fmt.Println(nameList)
fmt.Println(nameList == nil) //ture
go
var nameList []string = []string{}
fmt.Println(nameList == nil) //false
go
var nameList []string = []string{}
var nameList1 = []string{}
nameList2 := []string{}
nameList = make([]string, 0)
go
// 创建全是0的切片
ling := make([]int, 3)

切片的排序

升序

go
var intList []int = []int{4, 87, 54, 1, 25}
sort.Ints(intList)
fmt.Println(intList)

降序

go
sort.Sort(sort.Reverse(sort.IntSlice(intList)))

map

类似于 js 的对象

go
var nameMap map[string]int = map[string]int{
"张三": 18,
"李四": 19,
"王五": 20,
}
fmt.Println(nameMap)
map[张三:18 李四:19 王五:20]
go
fmt.Println(nameMap["张三"])
18
go
fmt.Println(nameMap["zhang"])
0

不存在的值会打印这个类型的初始值

怎么确定是否找到了这个值

go
value, ok := nameMap["zhang"]
fmt.Println(value, ok)
0 false

修改和删除

go
// 修改map
nameMap["张三"] = 20
fmt.Println(nameMap)
// 删除 map
delete(nameMap, "张三")
fmt.Println(nameMap)
go
map[张三:20 李四:19 王五:20]
map[李四:19 王五:20]
go
// map要做初始化
var aMap = map[string]string{}
var bMap = make(map[string]string)
fmt.Println(aMap, bMap)