数组Array
是同一种数据类型的固定长度的序列。
数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值
数组定义:var a [len]T,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。
初始化
1 | 全局: |
字符串
如下代码所示:
- 函数外定义字符串,为全局变量
- 在函数内定义s3 := “5555”,为局部变量
- 循环字符串时,单个字符的类型为
byte
,而字符有两种类型- 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符
- 另一种是 rune 类型,代表一个 UTF-8 字符,如中文,rune 类型等价于 int32 类型。
1 | // 全局定义字符串 |
byte
- 在字符串中代码已经详细说明了byte的定义,就是字符串中的每一个元素叫做“字符”,在遍历或者单个获取字符串元素时可以获得字符。
切片Slice
初始化
- 看如下代码,为声明和初始化
1 | //1.声明切片,int类型的数组 |
append
- 切片追加
1 | var a = []int{1, 2, 3} |
- 向 slice 尾部添加数据,返回新的 slice 对象
1 | s1 := make([]int, 0, 5) |
总结
- 切片是指针类型,数组是值类型
- 数组的赋值形式为值传递,切片的赋值形式为引用传递
- 数组的长度是固定的,而切片长度可以任意调整(切片是动态的数组)
- 数组只有长度一个属性,而切片比数组多了一个容量(cap)属性
map
- map是一种无序的基于key-value的数据结构
- 定义
map[KeyType]ValueType
,如map[string]int
1 | func main(){ |
元素为map类型的切片
- 对应于python中的
[{"name":"王五","password": "123456", "address":"红旗大街"},{}]
1 | var mapSlice = make([]map[string]string, 3) |
值为切片类型的map
- 对应于python中{“中国”:[“北京”, “上海”]}
1 | var sliceMap = make(map[string][]string, 3) |
interface
interface是一种抽象的类型,可以用来表示任何类型
比如如下场景,不像写结构体,就可以用
1 | js := `{"int":1,"string":"qwertyuiop","float":1.111}` |
类型转换
byte 转换为string
- data1.json中内容为:
1 | 1 2 |
- 代码如下
1 | f, err := os.Open("hello_work\\data1.json") |
string 转换为map
1 | package conver |
byte 转换为map
- data.json内容
1 | {"code": 1, "msg":"success", "data":[{"id": 1, "name":"西瓜"},{"id": 2, "name": "苹果"}]} |
1 | f, err := os.Open("hello_work\\data.json") |
map转换为string
- 在byte 转换为map中,最后三行代码就是把map转为string
1 | dataType, _ := json.Marshal(jsm) |