内容简介:Golang的数据声明格式如下data := [7]int{}data:=[3]int{1, 2, 3}
Golang的数据声明格式如下
data := [7]int{}
data:=[3]int{1, 2, 3}
data := [...]int{1, 2, 3}
我们注意到,与其他语言不同的是数组的大小放在前面。
Go 语言的数组当做参数时,是值传递,即会copy数组中的所有数据。
所以在实际的 go 语言开发中其实很少使用数组,而是使用slice.
所以下面我们重点介绍一下slice
data := []int{}
data := []int{1,2, 3}
slice的声明和array类似,只是省略了大小或者'...'
当slice的空间不足时,它就会自动将存储空间增加一倍。
可以用len(data)获取slice中数据的长度,用cap(data)获取slice的容量(capacity).
func printSlice(data []int){ for _, ele := range data{ fmt.Print(ele, " ") } fmt.Println() } func main(){ data := []int{1,2,3,4} printSlice(data) fmt.Printf("Capacity: %d, Length: %d\n", cap(data), len(data)) data = append(data, 10) printSlice(data) fmt.Printf("Capacity: %d, Length: %d\n", cap(data), len(data)) } ------------------------------------------ //result 1 2 3 4 Capacity: 4, Length: 4 1 2 3 4 10 Capacity: 8, Length: 5
上述代码生声明一个slice, 初始容量和数据长度都是4,然后通过append在slice后面动态添加了一个数据10, 此时由于容量已经等于已有数据长度,即slice已满,所以需要动态扩容, go扩容方案是直接在原来的基础上加倍 , 所以我们看到长度增加了1,但是容量增加了4
所以这里需要注意的就是,如果slice容量已经很多,且满了。那么此时添加一条记录的代价将是非常高的。
我们也可以通过make函数来生成slice. 通过make函数还可以指定slice的初始大小
data := make([]byte, 5)
*说到make,这里我们提一下go语言的内存分配, go 有两个内建函数来分配内存,new 和make. 两者的区别是,new只是分配存储空间,make则主要用于slice, map, channel的初始化
copy() 函数
copy(dst, src): copy函数将src slice的数据拷贝到dst slice里面
其中,
- dst, src必须是slice, 如果是array,则必须通过array[0:] 转换成slice
-
copy时,src数据会覆盖dst里面原来的数据, 如果src数据量小于dst数据量,那么dst里面会有一部分数据不被覆盖;如果src数据量大于dst,那么将只copy dst.length长度的src数据
我们通过下面的实例来体会一下
package main import "fmt" func main(){ a6 := []int{1,2,3,4,5,6} a4 := []int{-1,-2,-3,-4} fmt.Println("a6:", a6) fmt.Println("a4:", a4) copy(a6, a4) fmt.Println("copy a4 to a6, ", a6) fmt.Println() a6 = []int{1,2,3,4,5,6} a4 = []int{-1,-2,-3,-4} copy(a4, a6) fmt.Println("copy a6 to a4, ", a4) fmt.Println() array5 := [5]int{5,-5,5,-5,5} s7 := []int{7,7,7,7,7,7,7} fmt.Println("array5 ", array5) fmt.Println("s7 ", s7) copy(array5[0:], s7) fmt.Println("copy s7 to array5 ", array5) } -------------------------------------------- //result a4: [-1 -2 -3 -4] copy a4 to a6, [-1 -2 -3 -4 5 6] copy a6 to a4, [1 2 3 4] array5 [5 -5 5 -5 5] s7 [7 7 7 7 7 7 7] copy s7 to array5 [7 7 7 7 7]
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
jQuery实战(第2版)
[美]Bear Bibeault、[美]Yehuda Katz / 三生石上 / 人民邮电出版社 / 2012-3 / 69.00元
jQuery 是目前最受欢迎的JavaScript/Ajax 库之一,能用最少的代码实现最多的功能。本书全面介绍jQuery 知识,展示如何遍历HTML 文档、处理事件、执行动画、给网页添加Ajax 以及jQuery UI 。书中紧紧地围绕“用实际的示例来解释每一个新概念”这一宗旨,生动描述了jQuery 如何与其他工具和框架交互以及如何生成jQuery 插件。 本书适合各层次Web 开发人......一起来看看 《jQuery实战(第2版)》 这本书的介绍吧!