Golang 学习笔记02-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 最大位数

例:

var u8 uint8 = 255

八位二进制最小:

00000000=0

八位二进制最小:

11111111=2^8-1=255

浮点型

  • float32
  • float64

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

字符型

关键字''

  • 单字节:byte
  • 多字节:rune
//	单字节
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
type byte = uint8
var z rune = '中'
fmt.Printf("%c %d\n", z, z)
中 20013

字符串

关键字""

一些常用的转义字符

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

多行字符

··

    fmt.Println(`hello

world`)
hello

world

布尔

布尔变量默认为 false

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

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

零值问题

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

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

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

数组

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

Go 不支持逆向索引

字符长度的方法

fmt.Println(len(nameList))

不能添加元素

切片

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

只能同类型

初始化的问题

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

切片的排序

升序

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

降序

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

map

类似于 js 的对象

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

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

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

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

修改和删除

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