go语言学习(十、数组、切片、字典)

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型

package main

import (
	"fmt"
	"reflect"
)

func main() {
	/*
		数组声明
	*/
	// 数组声明格式 TypeOf输出变量类型
	// 结果输出:[10]int
	var tArray [10] int
	fmt.Println(reflect.TypeOf(tArray))
	// 不指定数组元素长度 让编译器自己识别
	// 结果输出:[3]int
	var tArray2 = [...]int{1, 2, 3}
	fmt.Println(reflect.TypeOf(tArray2))

	/*
		数组访问
	*/
	// 根据下标读取元素 初始下标为0 也就是偏移量 偏移量为0 所以读的是第一个元素
	// tArray只声明 没赋值 根据默认赋值规则 输出:0
	fmt.Println(tArray[0])
	// 输出tArray2第一个元素 1
	fmt.Println(tArray2[0])
	// 访问不存在的元素 编译错误 数组越界
	//fmt.Println(tArray2[3])

	/*
		多维数组
	*/
	// go语言支持多维数组 以二维数组为例
	// 声明
	var tArray3 [2][2] int
	// 初始化 输出:[[1 2] [3 4]]
	tArray3 = [2][2] int{{1, 2}, {3, 4}}
	fmt.Println(tArray3)
	// 根据下标访问 输出:1
	fmt.Println(tArray3[0][0])
}

切片是对数组的抽象 Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片(动态数组)

package main

import (
	"fmt"
	"reflect"
)

func main() {
	// 切片声明 未指定大小的数组就是切片 未赋值的切片值为nil
	var tSlice []int
	// 输出[]int
	fmt.Println(reflect.TypeOf(tSlice))
	// 使用make函数来创建切片
	var tSlice1 []int = make([]int, 10)
	// 输出[]int
	fmt.Println(reflect.TypeOf(tSlice1))
	// 简写 直接赋值
	tSlice2 := make([]int, 10)
	tSlice3 := []int{1, 2, 3}
	// 输出[]int
	fmt.Println(reflect.TypeOf(tSlice2))
	// 输出[]int
	fmt.Println(reflect.TypeOf(tSlice3))
	// 直接从数组中创建切片 s := arr[startIndex:endIndex]
	// 根据下标切割数组 左下标默认为起始 右下标默认为最后一个
	tArray := [5]int{1, 2, 3, 4, 5}
	tSlice4 := tArray[0:2]
	tSlice5 := tArray[0:]
	// 输出:[1,2]
	fmt.Println(tSlice4)
	// 输出:[1,2,3,4,5]
	fmt.Println(tSlice5)
	// 切片追加元素 输出:[1 2 3 4 5 1 2]
	fmt.Println(append(tSlice5, 1, 2))

}

Map 是一种无序的键值对的集合 通过 key 来快速检索数据,key 类似于索引,指向数据的值

package main

import (
	"fmt"
	"reflect"
)

func main() {
	// 声明变量,默认 map 是 nil
	var tMap map[string]string
	// 输出map[string]string
	fmt.Println(reflect.TypeOf(tMap))

	// 使用make函数创建map
	tMap2 := make(map[string]string)
	// 输出map[string]string
	fmt.Println(reflect.TypeOf(tMap2))

	// 遍历map
	// 输出 犀利的大熊 神奇的二熊
	tMap2["犀利的"] = "大熊"
	tMap2["神奇的"] = "二熊"
	for key, value := range tMap2 {
		fmt.Println(key, value)
	}

	// 删除map内某个元素 delete
	// 输出:map[神奇的:二熊]
	delete(tMap2, "犀利的")
	fmt.Println(tMap2)
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章