Go学习打卡Day02 数组&切片

115 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

Go学习打卡Day02 数组&切片

数组

1、数组的定义与初始化

package main
​
import (
    "fmt"
)
​
func main() {
    var arr [5]int
    fmt.Println(arr, len(arr))
​
    arr_1 := [5]int{1, 2, 3, 4, 5}
    fmt.Println(arr_1)
​
    arr_2 := [...]int{1, 2, 3}
    fmt.Println(arr_2, len(arr_2))
    
    //二维数组
    arr_3 := [3][3]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
    fmt.Println(arr_3)
​
}
​

output:

[0 0 0 0 0] 5 [1 2 3 4 5] [1 2 3] 3 [[1 2 3] [4 5 6] [7 8 9]]

2、数组的修改与传参

package main
​
import (
    "fmt"
)
​
func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    fmt.Println(arr)
    modifyArr(&arr)
    fmt.Println(arr)
}
func modifyArr(a *[5]int) {
    a[0] = 0
}
//output:
//[1 2 3 4 5]
//[0 2 3 4 5]

3、数组的遍历

package main
​
import (
    "fmt"
)
​
func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    for i := 0; i < 5; i++ {
        fmt.Println(arr[i])
    }
​
    for k, v := range arr {
        fmt.Println(k, v)
    }
}
​

切片

  • 切片是一种动态数组,比数组操作灵活,长度不是固定的,可以进行追加和删除。
  • 切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。
  • 切片是一个引用类型,它的内部结构包含地址长度容量。切片一般用于快速地操作一块数据集合。

1、声明切片

package main
​
import (
    "fmt"
)
​
func main() {
    // 声明切片类型
    var a []string              //声明一个字符串切片
    var b = []int{}             //声明一个整型切片并初始化
    var c = []bool{false, true} //声明一个布尔切片并初始化
    //var d = []bool{false, true} //声明一个布尔切片并初始化
    fmt.Println(a)        //[]
    fmt.Println(b)        //[]
    fmt.Println(c)        //[false true]
    fmt.Println(a == nil) //true
    fmt.Println(b == nil) //false
    fmt.Println(c == nil) //false
    //fmt.Println(c == d)   //切片是引用类型,不支持直接比较,只能和nil比较
}

2、切片表达式

Go刷题 每日语法练习

136. 只出现一次的数字

func singleNumber(nums []int) int {
    ret := 0
    for i := 0; i < len(nums); i++ {
        ret ^= nums[i]
    }
    return ret
}