go语言学习-数组, slice和map
2016-07-15 00:00
906 查看
数据结构 数组 slice map
数组为值传递,当赋值给另外一个变量的时候是将值全部都copy,存一个副本,改变副本的值不会改变原有数组。slice为指针传递,改变值会改变原有slice中存的值数组
数组定义后长度固定长度获取: len() 函数
所有的值类型变量在赋值,和作为参数传递时都将产生一次复制动作。
go数组是一个值类型,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所 传入数组的一个副本
在数组中类型和长度共同确定一个数组类型,也就是说[5]int 和[10]int 不是一个类型
创建
声明: var myArray [5]int推导: myArray := [3]int{1, 2, 3}
省略方式: myArray := [...]int{1,2,3}
slice 切片
创建
从数组上切一片, slice1 = myArray[:5]使用make, slice2 := make([]int, 5)
默认方式: slice3 := []int{1, 2, 3, 4, 5}, 事实上回创建一个匿名数组,不需要我们管
从切片上切一片: slice4 = slice1[:7] // 可以超过原有len(),但是不能超过cap(),多出来的部分补上零值(0)
添加 append
使用 append 添加元素:mySlice2 := []int{8, 9, 10} // 给mySlice后面添加另一个数组切片 mySlice = append(mySlice, mySlice2...) // ... 表示散列slice, 不加编译错误.加上省略号相 7 当于把mySlice2包含的所有元素打散后传入
copy
用于将内容从一个数组切片复制到另一个 数组切片。如果加入的两个数组切片不一样大,就会按其中较小的那个数组切片的元素个数进行 复制.slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{5, 4, 3} copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中 copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
其他操作
SliceTricksremove
Remove elements in sliceurlList := []string{"test", "abc", "def", "ghi"} remove := []string{"abc", "test"} for i := 0; i < len(urlList); i++ { url := urlList[i] for _, rem := range remove { if url == rem { urlList = append(urlList[:i], urlList[i+1:]...) i-- // Important: decrease index break } } } fmt.Println(urlList)
or
package main import "fmt" func main() { urlList := []string{"test", "abc", "def", "ghi"} remove := []string{"abc", "test"} new_list := make([]string, 0) my_map := make(map[string]bool, 0) for _, ele := range remove { my_map[ele] = true } for _, ele := range urlList { _, is_in_map := my_map[ele] if is_in_map { fmt.Printf("Have to ignore : %s\n", ele) } else { new_list = append(new_list, ele) } } fmt.Println(new_list) }
map
创建
声明并不会创建map : var myMap map[string]string nil, 不能赋值使用make赋值: myMap = make(map[string]string), 可以指定容量 myMap = make(map[string]string, 100)
推导: myMap := map[string]string{"1234": "Jack"}
添加
map[key] = value , 直接赋值删除
delete(myMap, key), 如果key不存在,则什么都不会发生,没副作用,但是如果map为nil,则panic是否存在
value, ok := map[key] ,ok 为true 找到相关文章推荐
- go语言学习-未分类的一些记录
- Django的搜索路径与Import机制
- Django的模板渲染(render)机制
- Django模板的include机制
- 理解Django里的MTV开发模式
- GO语言range的用法
- pgoneproxy的VIP机制
- go语言beego框架 orm实现insertOrUpdate功能
- 大话设计模式(golang) 五、工厂方法模式
- 【题】【线段树】NKOJ 2052 【USACO 2013 January Gold】座位
- golang
- go发送邮件
- Pokémon GO国内玩不了?腾讯AR专家教你自己做!
- Categorical, Ordinal, Interval - 变量之间的区别
- Google 推出全新的两步验证机制
- Google Guava中Preconditions的用法,让前置条件判断变得更优雅
- A Neural Algorithm of Artistic Style
- 使用Google开源tesseract OCR用语言库报allow_blob_division解决方案
- 使用了google zxing作为二维码生成工具
- AWS-GO-SDK NOTES