首页 > 其他分享 >Golang Array 数组使用注意事项和细节

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

时间:2023-10-03 10:06:25浏览次数:46  
标签:int fmt 数据类型 Golang 数组 注意事项 类型 Array 默认值


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

 

数组使用注意事项和细节


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 [5]int则有效下标为0-4

8) 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

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

 9) 如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)【先体验下,画示意图】

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 *[3]int a就表示指向类型[3]int类型数组的指针

Golang Array 数组使用注意事项和细节_数据类型

 

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

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

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

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

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

第三个是正确的

标签:int,fmt,数据类型,Golang,数组,注意事项,类型,Array,默认值
From: https://blog.51cto.com/u_14035463/7689618

相关文章

  • 第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分,驱动和应用层交互,中断DM
    视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 这个是我们初学RTOS面临的最直接问题,很多时候,简单的RTOS机制明白了,API也会调用了,就是添加到RTOS后,总感觉那里不对劲,怎么使用才是正确姿势。针对这些问题,本期视频教程,我们ThreadX内核教程穿插一期实......
  • Arrays常用方法
    1.Arrays.toString()方法方法作用:快速输出数组内容int[]a={1,2,3,4,5};System.out.println(Arrays.toString(a));//输出格式:[1,2,3,4,5]2.Arrays.sort()方法方法作用:给数组排序,默认升序int[]a=newint[5]{5,4,3,2,1};Arrays.sort(a);//12345System.out.printl......
  • Javascript之Object、Array
    Object.keys 对象的键转化为数组Object.values 对象的属性值转化为数组Object.assign 对象的合并 Array.from()伪数组对象的属性值转化为数组。类似Object.valuesArray.reduce 将数组的值减为单个值(从左到右)   ......
  • Java Arrays.fill() 方法详解
    在Java编程中,数组是一个非常常见的数据结构,而Java提供了许多有用的数组操作方法来简化开发过程。其中之一是Arrays.fill()方法,它允许我们填充一个数组的所有元素,将它们设置为指定的值。在本篇文章中,我们将深入探讨Arrays.fill()方法的用法、参数和示例,以帮助您更好地理解和使用它。......
  • golang 代码实现一个工具函数:用于合并两个go map
    内容来自对chatgpt的咨询初始化一个新map,然后遍历两个旧map,把每个元素都存到新map即可。packagemainimport"fmt"//MergeMaps创建一个新的map用于保存合并后的值。返回新的map。funcMergeMaps(destMap,sourceMapmap[string]interface{})map[string]inter......
  • golang 代码实现:并发请求下游接口,下游接口限制请求参数中某数组单次最多传20个
    内容来自对chatgpt的咨询假设你有一个golang的数组,数组元素数量大于20,你需要调用下游接口,但是接口的请求参数限制了一次最多传20个,为了节省时间,你需要并发调用,完整整个数组的下游调用,请完成代码编写写法一我们将数组切分成最大20个元素的小块,并对每个块并发调用下游接口:p......
  • golang 代码实现如果在在一个秒级时间戳上加上23h59m59s
    代码来自chatgpt实现如果在在一个秒级时间戳上加上23h59m59s先把时间戳转换成time对象,然后利用Add函数在该对象上添加23h59m59s,最后获取时间对象的时间戳packagemainimport( "fmt" "time")funcmain(){ //Supposeyouhaveatimestampinseconds timestam......
  • golang grom 实现 INSERT...ON DUPLICATE KEY UPDATE
    内容来自对chatgpt的咨询前言(INSERT...ONDUPLICATEKEYUPDATE介绍)当你在MySQL中插入数据,如果唯一键发生冲突,可以使用INSERT...ONDUPLICATEKEYUPDATE语句实现插入和更新操作。其基本语法如下:INSERTINTOtable(col1,col2,...colN)VALUES(value1,value2,...va......
  • golang 使用 gorm 查询数据 demo
    内容来自对chatgpt的咨询题目假设你有一张学生数据库表,需要通过golang的gorm查询某个id的学生实体查询demo在这段代码中,"student"变量是一个Student类型的结构体,用于存储查询结果。我们通过调用gorm.DB的Where方法和First方法,将第一个符合条件的结果存储到了"student"......
  • golang 求出这两个对象数组的2个差集,即存在其中一个数组,但是不存在于另一个数组
    代码来自chatgptpackagemainimport( "fmt" "reflect")typeObjectstruct{ IDint}funcmain(){ a:=[]Object{{1},{2},{3}} b:=[]Object{{2},{3},{4}} diffAB:=diff(a,b) diffBA:=diff(b,a) fmt.Println("InAn......