通学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语言系列之容器的主要内容,如果未能解决你的问题,请参考以下文章