go数组的声明和初始化
1.数组简介
数组是可以存放多个同一类型的数据。数组也是一种数据类型,在go中,数组是值类型。数组的长度也是数组类型的一部分,所以[2]int和[3]int属于不同的数据类型。
2.数组的长度也是类型的一部分
var arr1 [2]intvar arr2 [3]intfmt.Printf("arr1数据类型:%T\narr2数据类型:%T\n", arr1, arr2)
结果:
arr1数据类型:[2]int
arr2数据类型:[3]int
3.数组的定义
语法:var 数组名 [数组大小]数据类型
示例: var a [5]int
var b [3]string
4.数组的初始化
4.1第一种方法
var intarr [3]intintarr[0] = 1intarr[1] = 2intarr[2] = 3fmt.Println(intarr)var strarr [3]stringstrarr[0] = "js"strarr[1] = "java"strarr[2] = "go"fmt.Println(strarr)
结果:
[1 2 3]
[js java go]
4.2第二种方法
var intarr = [3]int{1, 2, 3}var strarr = [3]string{"java", "go", "javascript"}fmt.Println(intarr)fmt.Println(strarr)
结果:
[1 2 3]
[java go javascript]
4.3第三种方法
[...]让编译器自动根据初始化值的个数自行推断数组的长度。
var intarr = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}var strarr = [...]string{"golang", "java", "php"}fmt.Println(intarr)fmt.Println(strarr)fmt.Printf("intarr数据类型:%T\nstrarr数据类型:%T\n", intarr, strarr)
结果:
[1 2 3 4 5 6 7 8 9]
[golang java php]
intarr数据类型:[9]int
strarr数据类型:[3]string
4.4第四种方法
可以根据指定索引来初始化数组。
intarr := [...]int{1: 1, 0: 3, 2: 5, 9: 9}fmt.Println(intarr)strarr := [3]string{1: "a", 2: "b", 0: "c"}fmt.Println(strarr)
结果:
[3 1 5 0 0 0 0 0 0 9]
[c a b]
5.数组的内存布局
数组是值类型,更改副本的值,不会改变本身的值。
var arr = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}arr2 := arrarr[0] = 10fmt.Println("arr=", arr)fmt.Println("arr2=", arr2)
结果:
arr= [10 2 3 4 5 6 7 8 9]
arr2= [1 2 3 4 5 6 7 8 9]
内存分布
var intarr = [3]int{1, 2, 3}fmt.Println(intarr)fmt.Printf("intarr的地址=%p intarr[0]地址%p intarr[1]地址%p intarr[2]地址%p\n", &intarr, &intarr[0], &intarr[1], &intarr[2])
结果:
[1 2 3]
intarr的地址=0xc000014120 intarr[0]地址0xc000014120 intarr[1]地址0xc000014128 intarr[2]地址0xc000014130
有结果可以看出:
1.数组的地址可以通过数组名获取&intarr。
2.数组的第一元素的地址,就是数组的首地址。(intarr的地址=0xc000014120 intarr[0]地址0xc000014120)
3.数组的各个元素的地址间隔一句数组的类型决定,比如int64 -> 8 int32->4.
6.数组的遍历
6.1常规方法
var arr1 = [3]int{1, 2, 3}for i := 0; i < len(arr1); i++ {fmt.Println(arr1[i])}
结果:
1
2
3
6.2for-range结构遍历
var arr1 = [3]int{1, 2, 3}
for index, value := range arr1 {fmt.Printf("下标:%v--值:%v\n", index, value)}
结果:
下标:0--值:1
下标:1--值:2
下标:2--值:3
7.数组使用的注意事项和细节
7.1数组是多个相同类型的组合,一个数组一旦声明/定义了。其长度是固定的,不能动态变化。
7.2数组中的元素可以是任意数据类型,包括值类型和引用类型,但是不能混用。
7.3数组创建后,如果没有赋值,则默认值(零值),数值默认0,字符串默认”“,bool默认false
var intarr [3]int
fmt.Println(intarr)
结果:
[0 0 0]
7.4使用数组步骤
1.声明数组并开辟空间
2.给数组各个元素赋值(默认零值)
3.使用数组
7.5数组的下标是从0开始的。
7.6数组下标必须在指定范围内使用,否则包panic:数组越界。
var arr [5]int 则有效下标为0-4
7.7go的数组类型属于值类型,在默认情况下是值传递,因此会进行只拷贝。数组间不会相互影响。
7.8如果想在其他函数中,去修改原来的数组,可以使用引用传递(指针传递)
func test(arr *[3]int) {(*arr)[0]=12
}
7.9长度是数组的一部分,在传递函数参数时,需要考虑数组的长度。
8.练习
练习一求平均值
var arr = [...]int{98, 68, 78, 99, 98, 76, 90, 88}var sum = 0for i := 0; i < len(arr); i++ {sum += arr[i]}fmt.Println(float32(sum) / float32(len(arr)))
结果:86.875
练习二:求最大值和对应的下标
var arr = [...]int{98, 68, 78, 99, 98, 76, 90, 88}maxkey := 0maxvalue := arr[0]for key, value := range arr {if value > maxvalue {maxkey = keymaxvalue = value}}fmt.Printf("最大值::%d,下标:%d\n", maxvalue, maxkey)
结果:最大值::99,下标:3
练习三:创建一个byte类型的数组,分别存放'A'-'Z',使用for循环遍历.
var mychars [26]bytefor i := 0; i < 26; i++ {mychars[i] = 'A' + byte(i)}for i := 0; i < len(mychars); i++ {fmt.Printf("%c", mychars[i])}
结果:ABCDEFGHIJKLMNOPQRSTUVWXYZ
10.多维数组(了解)
var 数组变量名称 [元素数量][元素数量]T
var strarr = [3][2]string{{"a", "b"},{"b", "c"},{"d", "e"},}fmt.Println(strarr)fmt.Println(strarr[1])for i := 0; i < len(strarr); i++ {for j := 0; j < len(strarr[i]); j++ {fmt.Println(strarr[i][j])}}
结果:
[[a b] [b c] [d e]]
[b c]
a
b
b
c
d
e
注意事项:注意多维数组只有第一层可以用[...]让编译器退到数组的长度
a:=[...][2]string{} 支持
a:=[3][...]string{} 不支持
相关文章:
go数组的声明和初始化
1.数组简介 数组是可以存放多个同一类型的数据。数组也是一种数据类型,在go中,数组是值类型。数组的长度也是数组类型的一部分,所以[2]int和[3]int属于不同的数据类型。 2.数组的长度也是类型的一部分 var arr1 [2]intvar arr2 [3]intfmt.P…...
基于STM32的智能家居中控系统
基于STM32的智能家居中控系统 下载源文件 链接:博客 第1章 绪论 1.1 研究背景与意义(扩增至1500字) • 市场数据支撑:引用IDC报告数据显示,中国智能家居设备市场年增长率达25%(2022年市场规模超6500亿元) …...
初识Qt · 信号与槽 · 基础知识
目录 前言: 信号和槽初识 两个问题 前言: 本文我们正式开始介绍信号与槽这个概念,在谈及Qt中的信号与槽这个概念之前,我们不妨回顾一下Linux中的信号,比如发生了除0错误,OS就会给该进程发送一个信号&am…...
Java高频面试之集合-03
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:说说ArrayList和LinkedList的区别 ArrayList 与 LinkedList 的详细对比 一、底层数据结构 特性ArrayListLinkedList存…...
常用的分布式ID设计方案
常用的分布式ID设计方案 在分布式系统中,生成全局唯一的ID是一个常见的需求。无论是数据库表中的主键,还是消息队列的消息ID,都需要一个高效且可靠的唯一标识符。本文将探讨几种常用的分布式ID设计方案,并分析它们的优缺点。 1. …...
宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪
2025年3月5日,机器人行业龙头宇树科技(Unitree)在深圳再添新动作——全资子公司深圳天羿科技有限公司正式成立。这家注册资本10万元、法定代表人周昌慧的新公司,聚焦智能机器人研发与销售,标志着宇树科技在华南市场的战…...
【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)
背景: 已经用这个脚本的记得设置Wifi时候,关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开,一天要重新连接,点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本,那样我就可以解放双手&…...
基于遗传算法的无人机三维路径规划仿真步骤详解
基于遗传算法的无人机三维路径规划仿真步骤详解 一、问题定义 目标:在三维空间内,寻找从起点到终点的最优路径,需满足: 避障:避开所有障碍物。路径最短:总飞行距离尽可能短。平滑性:转折角度不宜过大,降低机动能耗。输入: 三维地图(含障碍物,如立方体、圆柱体)。起…...
【Elasticsearch】索引生命周期管理相关的操作(Index Lifecycle Actions)
Elasticsearch 的Index Lifecycle Management(ILM)是一种用于管理索引生命周期的工具,它允许用户根据索引的使用阶段(如热、温、冷、冻结)自动执行一系列操作。以下是详细解释 Elasticsearch 中的索引生命周期操作(Index Lifecycl…...
计算机毕业设计SpringBoot+Vue.js电商平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【杂谈】信创电脑华为w515(统信系统)登录锁定及忘记密码处理
华为w515麒麟芯片版,还有非麒麟芯片版本,是一款信创电脑,一般安装的UOS系统。 准备一个空U盘,先下载镜像文件及启动盘制作工具,连接如下: 百度网盘 请输入提取码 http://livecd.uostools.com/img/apps/l…...
初始提示词(Prompting)
理解LLM架构 在自然语言处理领域,LLM(Large Memory Language Model,大型记忆语言模型)架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…...
Vue+el-upload配置minIO实现大文件的切片并发上传、上传进度展示、失败重试功能
vue3el-upload实现切片上传 效果图 初始界面 上传中的界面 上传完成的界面 上传失败的界面 <template><div><el-uploadclass"BigFileUpload"ref"uploadRef"action"#"drag:show-file-list"false":on-change"…...
正则表达式梳理(基于python)
正则表达式(regular expression)是一种针对字符串匹配查找所定义的规则模式,独立于语言,但不同语言在实现上也会存在一些细微差别,下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…...
Scala 中 val 和对象内部状态的关系
在 Scala 中,val 用于声明不可变的变量,这意味着一旦 val 被赋值,它的引用(即指向的内存地址)就不能再改变。然而,这并不影响对象内部的状态(即对象的属性)是否可以改变。具体来说&a…...
skynet简单游戏服务器的迭代
在上一篇的基础上做了改进,主要三个更新: 基础框架引入多一层redis缓存,用于持久化数据,加速数据访问。原本需要通过mysql读取的操作,直接改成与redis层交互,redis会自动写入mysql,保证AP 最终…...
Python学习第八天
查看函数参数 操作之前给大家讲一个小技巧:如何查看函数的参数(因为python的底层源码是C语言并且不是开放的,也一直困扰着刚学习的我,这个参数叫什么名之类的看doc又总是需要翻译挺麻烦的)。 比如我们下面要说到的op…...
美股回测:历史高频分钟数据的分享下载与策略解析20250305
美股回测:历史高频分钟数据的分享下载与策略解析20250305 在金融分析和投资决策的精细化过程中,美股历史分钟高频数据发挥着至关重要的作用。这些数据以其详尽性和精确性,记录了股票每分钟的价格波动和成交量变化,为投资者提供了…...
【仿muduo库one thread one loop式并发服务器实现】
文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…...
服务流程设计和服务或端口重定向及其websocket等应用示例
服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…...
【数据库】关系代数
关系代数 一、关系代数的概念二、关系代数的运算2.1 并、差、交2.2 投影、选择2.3 笛卡尔积2.4 连接2.5 重命名2.6 优先级 一、关系代数的概念 关系代数是一种抽象的数据查询语言用对关系的运算来表达查询 运算对象:关系运算符:4类运算结果:…...
ubuntu20 安装python2
1. 确保启用了 Universe 仓库 在某些情况下,python2-minimal 包可能位于 Universe 仓库中。你可以通过以下命令启用 Universe 仓库并更新软件包列表: bash复制 sudo add-apt-repository universe sudo apt update 然后尝试安装: bash复制…...
MySQL无法连接到本地localhost的解决办法2024.11.8
问题描述:我的MySQL可以远程连接服务器,但无法连接自己的localhost。 错误提示: 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因: 1. 检查环境变量是否正确:发现没…...
【Leetcode 每日一题】1328. 破坏回文串
问题背景 给你一个由小写英文字母组成的回文字符串 p a l i n d r o m e palindrome palindrome,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典序最小 ,且 不是 回文串。 请你返回结果字符串。如果无法做到࿰…...
最新Spring Security实战教程(一)初识Spring Security安全框架
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
Docker的常用镜像
Docker的常用镜像命令主要包括镜像的查看、搜索、拉取、删除、构建等操作,以下是综合多个来源的总结: 一、基础镜像操作 查看本地镜像 docker images• 显示所有本地镜像,包含仓库名(REPOSITORY)、标签(TAG…...
告别GitHub连不上!一分钟快速访问方案
一、当GitHub抽风时,你是否也这样崩溃过? 😡 npm install卡在node-sass半小时不动😭 git clone到90%突然fatal: early EOF🤬 改了半天hosts文件,第二天又失效了... 根本原因:传统代理需要复杂…...
MapReduce 深度解析:原理与案例实战
在大数据时代,数据量的爆炸性增长对数据处理提出了前所未有的挑战。MapReduce 作为一种编程模型和并行处理框架,能够让我们在分布式环境下高效处理海量数据。本文将详细讲解 MapReduce 的基本原理、工作流程,并通过一个案例来展示如何应用这种…...
Android中的Fragment是什么以及它有哪些生命周期方法
Android中的Fragment介绍 Fragment,直译为“碎片”或“片段”,是Android中的一种组件,可以看作是Activity的模块化部分。它可以在一个Activity中承载一部分用户界面和逻辑,并能被多个Activity复用。通过Fragment,开发…...
Leetcode 1477. 找两个和为目标值且不重叠的子数组 前缀和+DP
原题链接: Leetcode 1477. 找两个和为目标值且不重叠的子数组 class Solution { public:int minSumOfLengths(vector<int>& arr, int target) {int narr.size();int sum0;int maxnINT_MAX;vector<int> dp(n,maxn);//dp[i]表示以索引i之前的满足要求…...
