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

Posted 通学技术

tags:

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

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

在上篇文章中,我们介绍了go语言的基本语法。这节我们重点来看看go之容器数据结构的用法。学过java的小伙伴应该都只要有一节很重要的知识,那就是集合。而go与之对应的就是容器,不过不同于java的集合包括List、Map、Set等,go这边的容器包含数组、切片和map。
下面就让我们展开看看吧~

9、容器之数组

package main

import "fmt"

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

// 数组
func main() 
	// 整型 未初始化赋值0
	var a1 [5]int = [5]int1, 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]int1, 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)


关于切片,我们可以理解成为动态数组,作为引用类型,也可以通过make的方式来进行构造。

11、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 := []int10, 20, 30, 40, 50
	for k, v := range a 
		fmt.Printf("a[%d]=%d\\n", k, v)
	

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




关于Map容器,我们也是经常会用到的,这里他只能通过make的方式进行构造。同时为了简化遍历,我们可以直接通过range的方式进行遍历。同时这里我们学到了指示器来进行特定场景的判断。已经当不需要某些输出时,参数可以通过占位符来代替。

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

以上是关于通学区块链系列-从go开始容器篇的主要内容,如果未能解决你的问题,请参考以下文章

通学区块链系列-从go开始之函数篇(二)

通学区块链系列-从go开始之函数篇(二)

通学区块链系列-从go开始之数据类型与定义

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

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

通学go语言系列之容器