Golang Array 数组使用注意事项和细节

在go数组当中,长度是数据类型的一部分 3int *3int

数组使用注意事项和细节


  1. 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化

    var a [3]int
    a[0] =1.1 这样是不行的,必须是整数

  2. var arr int这时arr就是一个slice切片(如果\[\]里面没有写大小,那么这个就是切片)

  3. 数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用

    复制代码
     var b = [10]*int{&i, &j, &k}
     fmt.Println(len(b))
     fmt.Println(*b[0], *b[1], *b[2])

    0xc0000a60f8 0xc0000a6100 0xc0000a6108

  4. 数组创建后,如果没有赋值,有默认值数值类型数组:默认值为0 字符串数组: 默认值为"" bool数组: 默认值为false (其实在定义数组的时候,空间就已经分配了,只是没有赋值使用默认值而已)

  5. 使用数组的步骤:1.声明数组并开辟空间 2.给数组各个元素赋值(不赋值就是使用默认的零值) 3.使用数组

  6. 数组的下标是从0开始的。

  7. 数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr 5int则有效下标为0-4

  8. Go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会相互影响

Go 复制代码
func Test(t [5]int) {
	fmt.Printf("%p\n", &t)
}

	c := [5]int{1, 2, 3, 4, 5}
	fmt.Printf("%p\n", &c)
	Test(c)

0xc00012a030
0xc00012a060

注意:3int是一个数据类型,长度也是数据类型 3int 4int不是同一种数据类型

  1. 如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)【先体验下,画示意图】
Go 复制代码
func Test(t *[5]int) {
	fmt.Printf("%p \n", t)
	fmt.Println((*t)[0], (*t)[1], (*t)[2], (*t)[3], (*t)[4])
	(*t)[0] = 100
}

func main() {
	c := [5]int{1, 2, 3, 4, 5}
	fmt.Printf("%p \n", &c)
	Test(&c)
	fmt.Println(c)
}


0xc00000e4e0
0xc00000e4e0 
1 2 3 4 5    
[100 2 3 4 5]

a *3int a就表示指向类型3int类型数组的指针

一个是值拷贝,一个是指针,如果数据很庞大,那么值拷贝是非常耗费资源的。

如果使用数组只是想要改变外面的数组,那么就使用指针传递,效率高,而且速度快。

第一个编译不过:数组在传递的时候长度是类型的一部分,这里是数组给了切片,编译不通过

第二个错误:长度是数据类型的一部分,长度不一样,3int和类型4int不一样

第三个是正确的

相关推荐
techdashen14 小时前
Go Map 详解:键值对实际上是如何存储的
开发语言·后端·golang
ttwuai19 小时前
Go 后台初始化 MySQL 脚本失败怎么办?先查 DDL 还是生成配置
开发语言·mysql·golang
名字还没想好☜19 小时前
Go 的 TCP 粘包与拆包:用长度前缀协议 + bufio 正确读消息
后端·tcp/ip·golang·go·php
王的宝库1 天前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
花酒锄作田1 天前
Go - Gin中使用sessions
golang
不甘先生2 天前
Go 中 type、方法与指针接收者:从 str_name.Name() 看懂 Go 的类型系统
开发语言·后端·golang
Casbin开源社区2 天前
一个面板管住 29 个 AI 编程 Agent:Casbin Gateway 的配置统一、协议互转、用量统计与权限管控
人工智能·golang·开源·gateway·casbin
名字还没想好☜2 天前
Go 标准库 flag 包实战:参数解析、子命令、自定义 Value 类型与默认值
开发语言·后端·golang·go
zh73142 天前
Go 1.23 → 1.26 升级检查文档
开发语言·chrome·golang
平头哥AI3 天前
Day 01 | go run 跑通第一个 Go 程序,go build 留下一个能拷走的 exe
开发语言·后端·golang