Go语言学习笔记(六)

一、数组、切片(slice)和映射

前言,在本章中,将学习关于数组的相关知识

1 使用数组

数组的定义格式如下:

	var <数组名> [<数组长度>]<数组类型>
	//e.g.
	var cheeses [2] string

数组的使用实例,如下:

package main

import "fmt"

func main() {
	var cheeses [2]string
	cheeses[0] = "Mar"
	cheeses[1] = "EPO"
	fmt.Println(cheeses[0])
	fmt.Println(cheeses[1])
	fmt.Println(cheeses)
}

2 使用切片

数组和切片很类似,但是我们可以在切片中添加和删除元素,切片的定义方法如下:

var cheeses = make([]string 2)
  1. 使用关键词var声明一个名为cheeses的变量
  2. 在等号右边,使用Go内置函数make创建一个切片,其中第一个参数为数据类型,第二个参数为长度。在这里创建的切片包含两个字符串元素。
  3. 将切片赋给变量cheeses
package main

import "fmt"

func main() {
	var cheeses = make([]string, 2)
	cheeses[0] = "Mar"
	cheeses[1] = "sfds"
	fmt.Println(cheeses[0])
	fmt.Println(cheeses[1])
	fmt.Println(cheeses)
}

2.1 在切片中添加元素

Go语言提供了内置函数append,用来增加切片的长度。

package main

import "fmt"

func main() {
	var cheeses = make([]string, 2)
	cheeses[0] = "Mar"
	cheeses[1] = "sfds"
	cheeses = append(cheeses, "dada")
	fmt.Println(cheeses[0])
	fmt.Println(cheeses[1])
	fmt.Println(cheeses[2])
	fmt.Println(cheeses)
}

这里注意append是不定参数函数

	cheeses = append(cheeses,"adsfa","afdasf","fadafad")

2.2 从切片中删除元素

从切片中删除元素同样可以使用append()函数来删除,例如:

	cheeses = append(cheeses[:2],cheeses[2+1:]...)

2.3 复制切片中的元素

复制切片的全部或者部分元素,可以使用内置函数copy。在复制切片中的元素前,必须再声明一个类型与该切片相同的切片(还是因为Go是静态类型语言)

package main

import "fmt"

func main() {
	var cheeses = make([]string, 3)
	cheeses[0] = "Mar"
	cheeses[1] = "sfds"
	cheeses[2] = "adsfa"
	var smelly = make([]string, 2)
	copy(smelly, cheeses)
	fmt.Println(smelly)//输出["Mar" "sfds"]
}

使用copy函数复制的切片内容不会超过载体本身的大小,饼再大,大不过烙它的锅;还有就是复制不会对正主有什么影响,毕竟是复制

3 使用映射(map)

  1. 数组和切片是可通过索引值访问的元素集合,而映射是通过键来访问的无序元素编组。大多数编程语言都支持数组:在其它语言中,映射也被称为关联数组、字典或散列。映射在信息查找方面的效率非常高,因为可以之间通过键来检索数据。简单地说,映射可视为键-值对集合。

只需一行代码就可声明并创建一个空映射:

var players = make(map[string]int)
  1. 关键词var声明players变量
  2. 使用make创建了一个映射,键的类型为string,值的类型为int
  3. 将这个空映射赋值给了变量players

应用实例如下:

package main

import "fmt"

func main() {
	var player = make(map[string]int)
	player["cook"] = 32
	player["baaf"] = 24
	player["adsf"] = 64
	fmt.Println(player["cook"])//输出32
	fmt.Println(player)//输出map[adsf:64 baaf:24 cook:32]
}

3.1 删除映射的元素

要从映射中删除元素,可使用内置函数delete。这里注意delete函数的参数是映射名称和键,map中的值不能作为参数

package main

import "fmt"

func main() {
	var player = make(map[string]int)
	player["cook"] = 32
	player["baaf"] = 24
	player["adsf"] = 64
	delete(player, "cook")
	fmt.Println(player)//输出map[adsf:64 baaf:24]
}

4 注意事项

  1. 除非确定必须使用数组,否则使用切片。切片能够轻松的添加和删除元素,还无需处理内存分配问题
  2. 没有从切片中删除元素的内置函数,只能使用append来删除切片中的元素
  3. 建立映射时,不需要指定映射的长度。使用内置函数make创建映射是,可使用第二个参数,但这个参数只是容量提示,而非硬性规定(就像python中变量后面的冒号是一个意思)。映射可根据要存储的元素数量自动增大,因此没有必要指定长度。
参考书籍
 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
题外话:
  1. 感觉这本书的知识点讲的实在是有些浅,可能是自己学的有问题?
  2. 速刷过去,研究黑砖,加油……
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兔不是秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值