var arr_name[num] arr_type
package main
import "fmt"
func main() {
// 写添加元素的个数
var test [5]string
fmt.Println(test)
for i:=0; i< 4; i++{
test[i+1] = "test"
}
fmt.Println(test)
// 不写添加元素的个数, 动态加载列表
var arry = [...]int{1, 2, 3, 4, 5, 6}
fmt.Println(arry)
}
/*
结果
[ test test test test]
[1 2 3 4 5 6]
*/
package main
import "fmt"
func main() {
var test = [...]string{"1","2","3","4"}
fmt.Println(test[2])
}
// 结果 3
invalid argument: index 10 out of bounds
package main
import "fmt"
func main() {
var idx = 10
var test = [...]string{"1","2","3","4"}
fmt.Println(test[idx])
}
// 报错 骗过编译器越界
package main
import "fmt"
func main() {
var arry1 [5] *int
fmt.Println(arry1)
arry1[0] = new(int)
arry1[1] = new(int)
arry1[2] = new(int)
arry1[3] = new(int)
arry1[4] = new(int)
*arry1[0] =10
*arry1[1] =10
*arry1[2] =10
*arry1[3] =10
*arry1[4] =10
fmt.Println(arry1)
for i:=0; i < len(arry1); i++{
fmt.Printf("%v\n",*arry1[i])
fmt.Printf("%v\n",arry1[i])
}
}
// 结果
/*
[<nil> <nil> <nil> <nil> <nil>]
[0xc00001e0b0 0xc00001e0b8 0xc00001e0c0 0xc00001e0c8 0xc00001e0d0]
10
10
10
10
10
*/
package main
import "fmt"
func main() {
var arry1 [3]*string
arry2 := [3]*string{new(string), new(string), new(string)}
fmt.Println(arry1)
fmt.Println(arry2)
arry1 = arry2
fmt.Println(arry1)
for i:=0; i < len(arry2); i++ {
fmt.Printf("%d, %v, %v\n", i, arry1[i], *arry1[i])
fmt.Printf("%d, %v, %v\n", i, arry2[i], *arry2[i])
}
}
/*
结果
[<nil> <nil> <nil>]
[0xc000014260 0xc000014270 0xc000014280]
[0xc000014260 0xc000014270 0xc000014280]
0, 0xc000014260,
0, 0xc000014260,
1, 0xc000014270,
1, 0xc000014270,
2, 0xc000014280,
2, 0xc000014280,
*/
package main
import (
"fmt"
"unsafe"
)
func bigArryPoint(arr *[1e6]int64) {
fmt.Printf("[数组指针复制:大小:%d 字节]\n", unsafe.Sizeof(arr))
}
func bigArry(arr [1e6]int64){
fmt.Printf("[数组复制:大小:%d 字节]\n", unsafe.Sizeof(arr))
}
func main() {
var arry [1e6]int64
bigArry(arry)
bigArryPoint(&arry)
}
/*
[数组复制:大小:8000000 字节]
[数组指针复制:大小:8 字节]
*/
package main
import (
"fmt"
"unsafe"
)
func bigArryPoint(arr *[1e6]int64) {
fmt.Printf("[数组指针复制:大小:%d 字节]\n", unsafe.Sizeof(arr))
}
func bigArry(arr [1e6]int64){
fmt.Printf("[数组复制:大小:%d 字节]\n", unsafe.Sizeof(arr))
}
func main() {
arry := [4][2] int{{1, 2},{10, 20},{30, 40},{50, 60}}
fmt.Println(arry[3])
fmt.Println(arry[3][0])
}
/*
结果
[50 60]
50
*/
var直接声明
package main
import (
"fmt"
)
func main() {
var s1 []int
fmt.Println(s1)
s1 = append(s1, 1)
s1 = append(s1, 1)
s1 = append(s1, 1)
fmt.Println(s1)
var s2 = []int{1,2,3}
fmt.Println(s2)
}
使用make
make([]类型, 长度, 容量)
package main
import "fmt"
func main() {
// 使用make初始化一个长度为0的slice
var s1 = make([]int, 0)
s1 = append(s1, 1)
s1 = append(s1, 2)
s1 = append(s1, 3)
fmt.Println(s1)
// 使用make,初始化一个长度为5,容量为5的slice
var s2 = make([]int, 5, 5)
s2 = append(s2, 1)
s2 = append(s2, 2)
s2 = append(s2, 3)
fmt.Println(s2)
}
/*
结果
[1 2 3]
[0 0 0 0 0 1 2 3]
*/
函数名 | 适用范围 | 返回值 | 填充值 |
---|---|---|---|
new | new可以对所有类型进行内存分配 | new返回指针 | new填充零值 |
make | make只能创建类型(slice、map、channel) | make返回引用 | make填充非零值 |
slice[start:end:cap]