go数据类型之数组

go语言中的数据是长度固定数据类型一致连续块,可以存储基础类型和结构类型。

这种数据结构决定了他的读写快插入慢(通常数组的性能和线性表中的链表比较)

  • 数组定义
// 一旦声明,数组存储的类型和长度都固定了,如果想变长,则必须创建一个新的数据,将当前数组复制到新数组中
// 创建了一个每个元素都是整数零值数组
var arr [5]int
arr := [5]int{1, 2, 3, 4, 5}
arr := [...]int{1, 2, 3, 4, 5}

//如果不加长度则定义的为切片
arr := []int{1, 2, 3, 4, 5}
  • 数组元素访问,修改,删除
// 定义一个数组
array := [5]int{1, 2, 3 ,4, 5}
// 去除数组中的一个元素
a_2 = array[1]
// 修改数组中的一个元素
array[2] = 35
// 使用切片删除第三个元素
a = append(a[:2], a[2+1:]...)

  • 数组复制
// 数组复制
只有元素个数相同,类型相同的数组才能相互复制

var arr1 = [5]int

arr2 := [...]int{1, 2, 3, 4, 5}

arr1 = arr2
  • 数组遍历
for _, e := range [5]int{1, 2, 3,4, 5}{
	// 通过range遍历得到的value是值拷贝。
	fmt.Println(e)
}

for i, e := range [5]int{1, 2, 3,4, 5}{
	// 通过range遍历得到的value是值拷贝。
	fmt.Println(i, e)
}

// range函数是值拷贝,如果想修改数组元素(特别是类似结构体时,需要直接通过数组引用进行修改)
arr := [5]int{1, 2, 3,4, 5}
fmt.Println(arr)
for i, e := range arr{
	// 通过range遍历得到的value是值拷贝。
	if i == 2{
		arr[i] = 9
		fmt.Println(e)
	}
}
fmt.Println(arr)

  • 数组作为函数参数进行传递时为值传递,切片作为函数参数进行传递时为引用传递
// 数组作为函数参数进行传递时,总是以值的方式进行传递
// 运行结果:
// In modify(), array values: [10 2 3 4 5]
// In main(), array values: [1 2 3 4 5]
package main

import "fmt"

func modify(array [5]int) {
  array[0] = 10
  fmt.Println("In modify(), array values:", array)
}

func main() {
  array := [5]int{1,2,3,4,5}
  modify(array)
  fmt.Println("In main(), array values:", array)
}

// 切片作为函数参数进行传递时,进行引用传递
// 运行结果:
// In modify(), array values: [10 2 3 4 5]
// In main(), array values: [10 2 3 4 5]
package main

import "fmt"

func modify(array []int) {
  array[0] = 10
  fmt.Println("In modify(), array values:", array)
}

func main() {
  array := []int{1,2,3,4,5}
  modify(array)
  fmt.Println("In main(), array values:", array)
}

 

转载于:https://my.oschina.net/yangting880815/blog/2049713

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值