go基础知识三
一.数组
数组是同一类型元素的集合,并且在内存中连续性存放。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(当然,如果是 interface{} 类型数组,可以包含任意类型)
一个数组的表示形式为 [n]T
。n
表示数组中元素的数量,T
代表每个元素的类型。元素的数量 n
//数组:数组是同一类型元素的集合,在内存中连续存放
package main
?
import "fmt"
?
func main() {
//1 基本使用:定义
//定义了一个大小为3的int类型数组
//数组在定义阶段,大小和类型就固定了
//var a [3]int //只定义,申请了三个地址,并没有初始化
//fmt.Println(a)
//结果:[0 0 0]
?
?
//2 使用数组(从0开始,定义了大小为3,就不能超
//var a [3]int
//a[2]=100
//fmt.Println(a)
//打印结果:[0 0 100]
//fmt.Println(a[0])
//打印结果:0
?
//3 定义并赋初值,需要带上类型
//var a [3]int=[3]int{1,2,3}
//var a =[3]int{1,2,3}
//a := [3]int{1, 2, 3}
?
//只给第2个位置设为99
//a := [3]int{2:99}
////进阶版
//a := [3]int{2:99,1:88}
//fmt.Println(a)
?
//4 数组的大小是类型的一部分
//这两个不是一个类型
//var a [2]int
//var b [3]int
//a=b
//fmt.Println(a>b)
?
//5 数组是值类型(当参数传递到函数中,修改不会改变原来的值)
// go语言中,都是copy传递,将值复制了一份传递过去,修改不会改变原来的值
/*
python中都是引用传递,一切皆对象,就是地址,当做参数传递是把地址传过去了
python中比较特殊:分为可变类型和不可变类型(可变类型改的就是原来的,不可变类型改的是新的)
*/
package main
?
import "fmt"
?
func main() {
var a [3]int=[3]int{5,6,7} //赋值
fmt.Println(a)
// [5,6,7]
test1(a)
fmt.Println(a)
//[5,6,7] //因为是值传递,这里打印的是初始的设定值
}
func test1(a [3]int) {
a[0]=999
fmt.Println(a)
// [999,6,7] // 这里打印的是函数test1的值
?
}
//6 数组长度(len)
//var a [3]int=[3]int{5,6,7}
//fmt.Println(len(a))
?
//7 循环数组
//方式一
//var a [3]int=[3]int{5,6,7}
//for i:=0;i // fmt.Println(a[i])
//}
//方式二
//range:是一个关键字(python中range是一个内置函数)
//var a [3]int=[3]int{5,6,7}
//for i,v:=range a{
// fmt.Println(i) //索引