demo1: 数组的初始化和遍历等操作
package main
import (
"fmt"
)
func main() {
//数组初始化的几种方式
var arr1 [3]int //元素带默认值,等价于arr1:=[5]{}
arr2 := [3]int{1, 2, 3} //自定义元素值
arr3 := [...]int{1, 2, 3, 4, 5} //不确定元素的个数,用省略号
var arr4 [4][5]int //二维数组
fmt.Println(arr1, arr2, arr3)
fmt.Println(arr4)
//go中的数组只支持取值和修改操作,不支持增加和删除
fmt.Println(arr2[1])
arr2[1] = 1
fmt.Println(arr2)
//数组遍历的几种方式
for i := 0; i < len(arr3); i++ {
fmt.Println(arr3[i])
}
//方式2,遍历出数组的下标和对应值
for i, v := range arr3 {
fmt.Println(i, v)
}
//只遍历数组的值,可以用_替换i
for _, v := range arr3 {
fmt.Println(v)
}
}
demo2: go使用数组传参时是值类型
go语言中函数传递参数的时候,数组作为参数,实际调用的时候是值传递,而python C C++等语言是引用传递
package main
import "fmt"
/*
go语言中函数传递参数的时候,数组作为参数,实际调用的时候是值传递,而python C C++等语言是引用传递
*/
func fun1(s [5]string) { //[]string这是切片类型
s[0] = "hello"
fmt.Println(s)
}
func main() {
//长度不一样的数组不是一个类型
s1 := [3]string{"1", "2", "3"}
s2 := [5]string{"1", "2", "3", "4", "5"}
fmt.Printf("%T", s1)
fmt.Println()
fmt.Printf("%T", s2)
fmt.Println()
//值传递,所以s3的值并为发生改变
s3 := [5]string{"1", "2", "3"}
fun1(s3)
fmt.Println(s3)
}