前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go 数组

go 数组

作者头像
潇洒
发布2023-10-20 09:56:26
1150
发布2023-10-20 09:56:26
举报
文章被收录于专栏:石头岛

注意事项

Go 语言数组声明有两种方式:

  1. 定长数组
  2. 不定长度数组

注意: 1.如果没有赋值,会有默认值

  • int 数组,默认初始化为: 0
  • string 就是空串

2.数据类型必须相同,不能混用,int数组不能包含float 等,已验证 3.boolean 是false 4.数组越界是 panic 异常 5.数组是值类型,默认情况下是值拷贝,也就是说每次拷贝后是一个独立副本,数组间互不影响。 6.可以使用指针来实现引用传递

长度用内置函数 len() 即可。

定长数组

即,开始就确定长度的数组。 语法还是比较灵活的,可以设置定长 和 不定长度的数组,直接通过赋值初始化

代码语言:javascript
复制
package P01var

import "fmt"

func ArrayTest3() {

  var hens [6]int
  hens[0] = 111
  hens[1] = 222
  hens[2] = 333
  for i := 0; i < len(hens); i++ {
    fmt.Printf("打印数组i=%d, 数据=%d\n", i, hens[i])
  }
}

结果:

打印数组i=0, 数据=111 打印数组i=1, 数据=222 打印数组i=2, 数据=333 打印数组i=3, 数据=0 打印数组i=4, 数据=0 打印数组i=5, 数据=0

如果输入,证明数组越界:

代码语言:javascript
复制
hens[9] = 999

../ArrayTest.go:11:6: invalid array index 9 (out of bounds for 6-element array)

另一种初始化,和java相同的语法

代码语言:javascript
复制
func ArrayTest4() {

  var balance [10] float32
  
  var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
  
  //一般用这种方式
  balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

}

不定数组长度

如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:

格式

代码语言:javascript
复制
func ArrayTest6() {
  var balance1 = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

  // 等价写法
  balance2 := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
}

另一种写法

代码语言:javascript
复制
// 如果 [5]int 后,[...]int 后的元素个数要对上,否则报错
func test1()  {
  var arr [5]int = [...]int{1, 2, 3, 4, 5}
}

通过下标初始化

如果设置了数组的长度,我们还可以通过指定下标来初始化元素: 格式:

{index1:value1, index2:value2}

举例 初始化第 13 两个元素:

代码语言:javascript
复制
func ArrayTest5() {
  //  将索引为 1 和 3 的元素初始化
  balance := [5]float32{1:2.0, 3:7.0}
  
  // 初始化 balance[4]
  balance[4] = 50.0
}

遍历数组

代码语言:javascript
复制
package main

import "fmt"

func main() {
   var n [10]int /* n 是一个长度为 10 的数组 */
   var i,j int

   /* 为数组 n 初始化元素 */        
   for i = 0; i < 10; i++ {
      n[i] = i + 100 /* 设置元素为 i + 100 */
   }

   /* 输出每个数组元素的值 */
   for j = 0; j < 10; j++ {
      fmt.Printf("Element[%d] = %d\n", j, n[j] )
   }
}

结果

Element[0] = 100 Element[1] = 101 Element[2] = 102 Element[3] = 103 Element[4] = 104 Element[5] = 105 Element[6] = 106 Element[7] = 107 Element[8] = 108 Element[9] = 109

声明数组的同时快速初始化数组

代码语言:javascript
复制
func ArrayTest2() {
  var i,j,k int
  // 声明数组的同时快速初始化数组
  balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

  /* 输出数组元素 */
  for i = 0; i < 5; i++ {
    fmt.Printf("balance[%d] = %f\n", i, balance[i] )
  }

  balance2 := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
  /* 输出每个数组元素的值 */
  for j = 0; j < 5; j++ {
    fmt.Printf("balance2[%d] = %f\n", j, balance2[j] )
  }

  //  将索引为 1 和 3 的元素初始化
  balance3 := [5]float32{1:2.0,3:7.0}
  for k = 0; k < 5; k++ {
    fmt.Printf("balance3[%d] = %f\n", k, balance3[k] )
  }
}

总结

数组的声明和初始化的几种写法,大概罗列了这几种,后面再聊聊切片。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注意事项
  • 定长数组
  • 不定数组长度
    • 通过下标初始化
      • 遍历数组
        • 声明数组的同时快速初始化数组
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档