一、概述:
今天开始,review 之前学过的go 的内容, 学而实习之,温故知新, 不为其他事项所耽误, 调整好自己下半年的时间安排;
go 中的关键字、基本类型、条件控制、循环 等最基础的内容就不重新整理, 从数组开始 往go 的高级内容进行复习,通过代码直接来熟悉前面的基础内容;
二、练习:
代码如下
package main
import (
"fmt"
)
/*
1. 数组是值类型,赋值和传参会赋值整个数组,而不是指针
2. 数组长度必须是常量,且是类型的组成部分; [2]int 和 [3]int 是不同类型的数组
3. 支持 == , != 操作符,因为内存总是被初始化过的
4. 指针数组[n]*T , 数组指针 *[n]T
*/
func main() {
//初始化
arr1 := [3]int{1, 2}
arr2 := [...]int{1, 2, 3, 4}
arr3 := [5]int{2: 100, 4: 200}
arr4 := [...]struct {
name string
age uint8
}{
{"Ryan.Xu", 26},
{"Huanchao.Xu", 18},
}
fmt.Println(arr1)
fmt.Println(arr2)
fmt.Println(arr3)
fmt.Println(arr4)
//遍历
for i := 0; i < len(arr4); i++ {
obj := arr4[i]
fmt.Printf("name: %s, age: %d \n", obj.name, obj.age)
}
for i, obj := range arr4 {
fmt.Printf("index: %d, name: %s, age: %d \n", i, obj.name, obj.age)
}
//多维数组
twoDimensionArray := [2][3]int{
{1, 2, 3},
{4, 5, 6},
}
// 第 2 维度不能使用 ...
twoDimensionArray2 := [...][2]int{
{1, 1},
{2, 2},
{3, 3},
}
fmt.Println(twoDimensionArray)
fmt.Println(twoDimensionArray2)
for i := 0; i < len(twoDimensionArray); i++ {
for j := 0; j < len(twoDimensionArray[i]); j++ {
fmt.Printf("第 %d 行, 第 %d 列的 元素是:%d \n", i, j, twoDimensionArray[i][j])
}
}
// 数组形参,值拷贝
arr := [2]int{1, 3}
fmt.Printf("数组arr 的地址为: %p \n", &arr)
test(arr) //修改 arr[1] 为 10000
fmt.Println("数组arr 的value 为:", arr)
}
//值拷贝行为会造成性能问题,建议使用slice or 数组指针
func test(arr [2]int) {
fmt.Printf("传入的数组参数arr 的指针为: %p \n", &arr)
arr[1] = 10000
fmt.Printf("传入的数组参数arr 的value为: %p \n", &arr)
}