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

news2024/10/7 18:22:29

在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类型数组的指针

 

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

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

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

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

第三个是正确的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“对象创建”模式

通过“对象创建”模式绕开new,来避免对象创建 (new) 过程中所导致的紧耦合(依赖具体类)从而支持对象创建的稳定。它是接口抽象之后的第一步工作。 典型模式 Factory MethodAbstract FactoryPrototypeBuilder Factory Method 动机 (Motivation) 在软件系统中&am…

【数据结构】二叉树的层序遍历(四)

目录 一,层序遍历概念 二,层序遍历的实现 1,层序遍历的实现思路 2,创建队列 Queue.h Queue.c 3,创建二叉树 BTree.h BTree.c 4,层序遍历的实现 一,层序遍历概念 层序遍历:除了先序…

Day981.OAuth 2.0的工作流程与安全问题 -OAuth 2.0

OAuth 2.0的工作流程与安全问题 Hi,我是阿昌,今天学习记录的是关于OAuth 2.0的工作流程与安全问题的内容。 一、OAuth 2.0 工作流程串讲 OAuth 2.0 是一种授权协议,这种协议可以让第三方软件代表用户去执行被允许的操作。 那么,…

HI_NAS linux 记录

dev/root 100% 占用解决记录 通过下面的命令查看各文件夹 大小 sudo du --max-depth1 -h # 统计当前文件夹下各个文件夹的大小显示为M 最终发现Var/log 占用很大空间 发现下面两个 log 占用空间很大,直接 rm-rf 即可 HI NAS python3 记录 # 安装pip3 sudo apt u…

4.后端·新建子模块与开发(传统模式)

文章目录 学习资料新建子模块与各层查询entity的列表entitymapper层service层controller层 测试 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p8&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e b站的学习视频 新建子模块与各层 在r…

Angular变更检测机制

前段时间遇到这样一个 bug,通过一个 click 事件跳转到一个新页面,新页面迟迟不加载; 经过多次测试发现,将鼠标移入某个 tab ,页面就加载出来了。 举个例子,页面内容无法加载,但是将鼠标移入下图…

NO.396 旋转数组

题目 给定一个长度为 n 的整数数组 nums 。 假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为: F(k) 0 * arrk[0] 1 * arrk[1] ... (n - 1) * arrk[n - 1] 返回 F(0), F(1), ..., F(n-1)中的最大值 。 生成…

深度学习-卷积神经网络-纹理表示卷积神经网络-卷积神经网络-[北邮鲁鹏]

这里写目录标题 参考文章全连接神经网络全连接神经网络的瓶颈全连接神经网络应用场景 卷积神经网络卷积层(CONV)卷积核卷积操作卷积层设计卷积步长(stride)边界填充特征响应图组尺寸计算 激活层池化层(POOL)池化操作定义池化操作作用池化层超参数常见池化操作 全连接层(FC)样本…

linux相关知识以及有关指令3

在linux的世界中我们首先要有万物皆文件的概念,那么在系统中有那么多的文件,我们该怎么区分呢?文章目录 1. 文件分类2. 文件的权限1). 拥有者和所属组以及other2). 文件的权限3). 粘滞位4). 对于权限修改的拓展知识点a.修改权限b.修改拥有者所…

智慧工地平台源码 劳务实名制、视频监控、扬尘监测、起重机械安全监测

伴随着技术的不断发展,信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升,智慧工地概念应运而生,智慧工地平台围绕施工现场管理,构建全方位的智能监控防范体系弥补传统方法和技术在监管中的缺陷,形成…

分享一个Python 写的监控日志log txt文档 的代码

监控log文件的需求 某些特殊原因,想一直看到.log 的最后一行打印,所以写了一些代码监控log (有个奇怪需求,就是log 因为重复启动原因,会一直加,不是同一个log) 监控界面 涉及的Python代码&…

管理类联考——数学——汇总篇——知识点突破——代数——数列——秒杀

🐟 ⛲️ 特殊值秒解数列 当数列题目中只有一个条件时,在不违背题意的条件下,可以直接利用特殊值, 令其公差为0或公比为1。 注意:一定要检验是否符合题意,题目中如果出现公差不为0或公比不为1,则…

华为云云耀云服务器L实例评测|部署前后端分离项目

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 学习测评 ✨特色专栏: MyS…

[NLP] LLM---<训练中文LLama2(一)>训练一个中文LLama2的步骤

一 数据集 【Awesome-Chinese-LLM中文数据集】 【awesome-instruction-dataset】【awesome-instruction-datasets】【LLaMA-Efficient-Tuning-数据集】Wiki中文百科(25w词条)wikipedia-cn-20230720-filteredBaiduBaiKe(563w词条) …

VIRTIO-SCSI代码分析(3)VIRTIO SCSI数据流处理

VIRTIO SCSI整体数据流如下: IO请求下发过程 虚拟机中通过FIO等下发IO请求,IO请求通过VFS/filesystem,BLOCK层,然后到SCSI层,传递给virtio-scsi驱动,virtio-scsi驱动通过virtioscsi_commit_rqs()下发IO请求…

利用 SOAR 加快事件响应并加强网络安全

随着攻击面的扩大和攻击变得越来越复杂,与网络攻击者的斗争重担落在了安全运营中心 (SOC) 身上。SOC 可以通过利用安全编排、自动化和响应 (SOAR) 平台来加强组织的安全态势。这一系列兼容的以安全为中心的软件可加快事…

【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码

目录 1 基本子图绘制示例 2 子图网格布局 3 调整子图的尺寸 4 多行多列的子图布局 5 子图之间的共享轴 6 绘制多个子图类型 7 实战: 绘制一个大图,里面包含6个不同类别的子图,不均匀布局。 绘制子图(subplots)…

redis的安装、基础命令学习、常用数据结构

文章目录 前言一、Redis安装1.Ubuntu下安装(1)切换到root用户下(2)使用apt安装redis5(3)为了使redis支持远程连接,修改以下地方(4)验证安装是否成功 2.Centos7下安装&…

基于Java+SpringBoot+Vue+uniapp点餐小程序(包含协同过滤算法和会员系统,强烈推荐!)

校园点餐小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 系统功能结构设计4.2 主要功能描述 五…

理清Spring事务的核心关键类

在spring事务源码的内部,会有几个比较核心关键的类,虽然这基本上都是源码内部才使用到的类,但是有时候我们要对其做一些改造的时候免不了要去使用到这些类,并且这些类在spring事务内部都是起到关键的作用,对了解spring…