通学go语言系列之容器

Posted 通学技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通学go语言系列之容器相关的知识,希望对你有一定的参考价值。

通学技术,面向区块链编程

9、容器之数组

package main

import "fmt"

/**
容器 --可分为 数组 切片 map
*/

// 数组
func main() {
	// 整型 未初始化赋值0
	var a1 [5]int = [5]int{1, 2, 3, 4}
	fmt.Println(a1)

	// 赋值
	a1[4] = 6
	fmt.Println(a1)

	// 字符串类型赋值空
	s1 := [4]string{"1", "2", "3"}
	fmt.Println(s1)

	// 二维数组
	a2 := [3][4]int{
		{0, 1, 2, 3},
		{4, 5, 6, 7},
		{8, 9, 10, 11},
	}
	fmt.Println(a2)

	// 遍历二维数组
	for i := 0; i < 3; i++ {
		for j := 0; j < 4; j++ {
			fmt.Printf("i = %d, j = %d, val = %d\\n", i, j, a2[i][j])
		}

	}

}

10、切片

package main

import "fmt"

/*
	切片-- 可以理解为动态数组
	特点:1.切片“start:end” 前闭后开,实际截取下标是start到end-1
		 2.切片是引用类型,对切片的修改会影响原数组
*/

func main() {

	/*
		构造方式一 从数组或者切片截取而来

	*/
	a1 := [5]int{1, 2, 3, 4, 5}
	s1 := a1[2:4]
	fmt.Println(a1)
	fmt.Println(s1)

	s1[1] = 100
	fmt.Println(a1)
	fmt.Println(s1)

	/*
			构造方式二: 使用make来构造切片
		    语法:make([]T,length,capacity)
			说明:[]T 代表切片 T代表切片内元素的类型
				 length 切片的长度
				 capacity 切片的容量 可省略,默认与length相同
			相关函数:
				 len(s):计算切片的长度
				 cap(s): 计算切片的容量
				 append(s1,T...): s1为T类型的切片,append会向
			s1所有元素后追加T,并且返回s1+T这个心切片
				 copy(s2,s1): 将s1的内容拷贝到s2,s1和s2相互独立
	*/

	var s2 []int
	s2 = append(s2, 1)
	s2 = append(s2, 2)
	s2 = append(s2, 3, 4, 5)
	printSlice(s2)

	s3 := make([]int, 3)
	printSlice(s3)

	// 当超过容量的时候,容量会以len*2的方式自动扩大
	s3 = append(s3, 4)
	printSlice(s3)

}

func printSlice(s []int) {
	// %v go语言特殊的输出方式 可以打印容器 自定义方式等
	fmt.Printf("len = %d, cap = %d, s = %v\\n", len(s), cap(s), s)
}

map

package main

import "fmt"

/*
	map 字典 key-value 无序键值对集合
*/

func main() {
	// 报空指针(nil)错误
	//var testMap map[string]string
	//testMap["test"] = "测试"
	//fmt.Println(testMap)

	// 必须使用make函数构造
	countryCapitalMap := make(map[string]string)
	//map[]
	fmt.Println(countryCapitalMap)

	countryCapitalMap["China"] = "BeiJing"
	countryCapitalMap["France"] = "Paris"
	countryCapitalMap["America"] = "Washington"

	// 默认按照字母顺序排列
	fmt.Println(countryCapitalMap)

	//获取key对应的value值
	capital1 := countryCapitalMap["China"]
	fmt.Println(capital1)

	// 不存在怎么办呢?
	capital2 := countryCapitalMap["Japan"]
	fmt.Println("日本的首都是:" + capital2)

	//指示器 ok 是一个变量,可以为任何值 当“ok”为真时 代表字典内存在该key对应的value
	capital2, ok := countryCapitalMap["Japan"]
	if ok {
		fmt.Println("此处不会打印出来" + capital2)
	}
	capital3, isExist := countryCapitalMap["China"]
	if isExist {
		fmt.Println(isExist, capital3)
	}

	fmt.Println("--------------我是分割线------------------")

	// map的遍历 --range
	for k, v := range countryCapitalMap {
		fmt.Println(k, "'s capital is:", v)
	}

	// range 扩展 可以遍历数组或者切片
	a := []int{10, 20, 30, 40, 50}
	for k, v := range a {
		fmt.Printf("a[%d]=%d\\n", k, v)
	}

	// 占位符 “_” 当我们不需要使用一些东西时  可以使用占位符
	for _, v := range countryCapitalMap {
		fmt.Println("只打印首都:", v)
	}


}

学通技术,构建可信任社会

以上是关于通学go语言系列之容器的主要内容,如果未能解决你的问题,请参考以下文章

通学区块链系列-从go开始容器篇

通学go语言系列之面向对象

通学go语言系列之函数(二)

通学go语言系列之基础变量及语句

通学区块链系列-从go开始之面向对象

通学区块链系列-从go开始之面向对象