数组Array

数组在go中用的不是很多,比较常用的还是切片

声明一个数组

package main

import "fmt"

func main() {
  var a1 [3]bool
  var a2 [4]bool
  fmt.Printf("a1:%T,a2:%T", a1, a2)
}

注意在go中数组长度是数组类型的一部分,只有同样长度的数组才能进行比较,而且长度一旦定义就不能更改。

数组的定义

var 数组名 [数组长度] 数组类型

数组的初始化

数组不初始化,默认值是零值

例如字符串就是空值,布尔值就是false,整形和浮点都是0

package main

import "fmt"

func main() {
  var a1 [3]bool
  var a2 [4]bool
  _ = a2
  //初始化方式1
  a1 = [3]bool{true, true, true}
  fmt.Println(a1)

  //初始化2
  //根据初始值自动推断数组的长度是多少
  a10 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  fmt.Println(a10)
  fmt.Printf("a10: %T \n", a10) //这里可以看到a10的类型是[10]int
  //初始化3,指定索引的方式来初始化
  a5 := [5]int{0: 1, 4: 5}
  fmt.Println(a5)

}

数组的遍历

package main

import (
  "fmt"
)

func main() {
  a1 := [...]string{"上海", "天津", "北京"}
  //索引遍历
  for i := 0; i < len(a1); i++ {
    fmt.Println(a1[i])
  }
  //for range遍历
  for i, v := range a1 {
    fmt.Println(i, v)
  }
}

多维数组

可以理解为嵌套数组

例如声明这样的数组:[[1,2] [3,4] [5,6]]

注意go数组内只能放同一个类型的数组

package main

import "fmt"

func main() {
  var a [3][2]int //[3]的值是[2]int

  a = [3][2]int{ //注意外层[3][2]int一定要写对
    [2]int{1, 2},
    [2]int{3, 4},
    [2]int{5, 6},
  }
  fmt.Println(a)
}

多维数组的遍历

package main

import "fmt"

func main() {
  var a [3][2]int

  a = [3][2]int{
    [2]int{1, 2},
    [2]int{3, 4},
    [2]int{5, 6},
  }
  fmt.Println(a)
  for _, v1 := range a {
    fmt.Println(v1) //这个只遍历了[3]数组内的[2]数组
    for _, v2 := range v1 {
      fmt.Println(v2) //这个则遍历了[3]数组中的[2]数组中的所有元素
    }
  }
}

数组的类型

数组的类型是值类型

  b1 := [3]int{1, 2, 3}
  b2 := b1    //这一步只是进行了拷贝和复制
  b2[0] = 100 //这里赋值并不会更改b1的值
  fmt.Println(b1, b2)

数组是支持"=="和"! ="操作符,因为内存总是被初始化过的

posted @   suknna  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示