Go语法——数组

go语言数组用法介绍,go语言中数组其实用的非常少,因为它有非常灵活的切片,这种灵活度甚至超过了python的切片,所以go语言的绝大部分数组操作基本由切片完成,所以我们仅需要简单了解一下go语言简单的数组用法

基本定义

你会看到集中常见的数组定义方法:

var arr1 [5]int // 整形数组

arr2 := [3]int{1, 3, 5} // 同时赋值版本

arr3 := [...]int{2, 4, 6, 8, 10} // 不定长版本

var grid [4][5]bool // 二维布尔类型版本

...不知道你们还记得不,不定参数的意思,可以输入任意长度的参数,在这里是让编辑器自动判断数组有几个数

也有这样定义的

var cheeses = make([]string, 2)

# make生成string类型的,长度为2的空数组

赋值

和常用的语言赋值操作没啥区别,go语言数组有很独特的切片,这种方式在后面会提到

var arr1 [5]int
arr1[0] = 1

遍历

学习过python的同学对内置函数range肯定不陌生,熟练的便能写出如下代码:

a = [1,2,3,4,5,6]
for i in range(a):
    ...

前面有提到,go语言的函数可以拥有多个返回值,这种特性在go语言的range函数中也不行例外,在go语言中的range具体用法如下

	var arr [...]int{1,2,3,4,5}
	for i, v := range arr {
		fmt.Println(i, v)
	}

在这里,range对数组arr进行遍历,同时返回两个值,i表示现在遍历到的数组下标,v表示这个下标上数组中的值,一个代表位置,一个代表具体的数

这样就没有了普通循环遍历中使用arr[i]来获取对应数组位置上的数值的语句

但例外的是,前面提到对go语言中函数多个返回值若只想要其中一个,则其他的返回值位置要使用_占位,

在这里,如果我只想要数组下标,可以直接写成:

	var arr [...]int{1,2,3,4,5}
	for i:= range arr {
		fmt.Println(i)
	}

如果要数值则需要老老实实的把i替换成_

类型的讨论

对go语言,其数组是值类型的

证明如下

package main
import "fmt"

func printArray(arr [5]int) {
	arr[0] = 100
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

func main() {
	var arr1 [5]int{2,4,6,8,10}
	fmt.Println("printArray(arr1)")
	printArray(arr1)
	fmt.Println(arr1)
}

上述程序大家可以跑一跑,输出如下:

	printArray(arr1)
	0 100
	1 4
	2 6
	3 8
	4 10
	[2 4 6 8 10]

可以观察到,在函数printArray中arr[0]的值被修改为100,但是在main里面,arr[0]
这个位置上依旧是2

因为go语言在数组传递中是将数组拷贝传递过去,相当于一份副本被传递,当然,也是可以修改的,这就要使用到指针

package main
import "fmt"

func printArray(arr *[5]int) {
	arr[0] = 100
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

func main() {
	var arr1 [5]int{2,4,6,8,10}
	fmt.Println("printArray(arr1)")
	printArray(&arr1)
	fmt.Println(arr1)
}

输出如下:

	printArray(arr1)
	0 100
	1 4
	2 6
	3 8
	4 10
	[100 4 6 8 10]

最后,总结一句,go语言中一般很少直接使用数组,除非必须使用,基本使用切片来代替,下次我们会具体介绍go语言的切片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值