Go——数组

        Golang Array和以往认知的数组有很大的。

  • 数组是同一种数据类型的固定长度的序列。
  • 数组定义:var a[len] int,比如:var a [5]int,数组长度必须是常量,且类型的组成部分。一旦定义,长度不能变。
  • 长度是数组类型的一部分,因此,var a[5] int和var a[10] int是不同的类型。
  • 数组可以通过下标进行访问,下标从0开始,最后一个元素下标是:len-1。
for i := 0; i < len(a); i++ {}for index, v := range a {}
  • 访问越界,如果下标在数组合法范围之外,则触发访问越界,会panic。
  • 数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。
  • 至此"==","!="操作符,因为内存总是被初始化过的。
  • 指针数组 [n] *T,数组指针 *[n]T。

        1.数组初始化

  • 一维数组
package mainimport ("fmt"
)// 全局变量
var arr0 [5]int = [5]int{1, 2, 3} //未初始化元素值为0
var arr1 = [5]int{1, 2, 3, 4, 5}
var arr2 = [...]int{1, 2, 3, 4, 5, 6}           //通过初始化值来确定数组长度
var str = [5]string{3: "hello world", 4: "tom"} //通过引号初始化元素func main() {//局部变量a := [3]int{1, 2}                          //未初始化元素值为0b := [...]int{1, 2, 3, 4, 5}               //通过初始化值来确定数组长度c := [5]string{3: "hello world", 4: "tom"} //通过引号初始化元素d := [...]struct {name stringage  uint8}{{"user1", 10}, //可以省略元素类型{"user2", 20}, //不要忘记最后的逗号}fmt.Println(arr0, arr1, arr2, str)fmt.Println(a, b, c, d)
}

  • 多维数组 
package mainimport "fmt"//全局变量
var arr0 [5][3]int
var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {4, 5, 6}}func main() {//局部变量a := [2][3]int{{1, 2, 3}, {4, 5, 6}}b := [...][2]int{{1, 2}, {3, 4}, {5, 6}} //第二维度不能为...fmt.Println(arr0, arr1)fmt.Println(a, b)
}

2. 数组值拷贝

        数组是值类型,赋值和传参会复制整个数组,而不是指针。

        值拷贝行为会造成性能问题,通常会建议使用slice,或数组指针。

package mainimport "fmt"func test(a [2]int) {fmt.Printf("test-a:%p\n", &a)a[0] = 100a[1] = 100
}func main() {var a [2]intfmt.Printf("main-a:%p\n", &a)test(a)fmt.Println(a)
}

        因为值拷贝,地址不同,数据有没有修改。 

3. 内置函数

        内置函数len和cap都返回数组长度(元素数量)

package mainimport "fmt"func main() {var arr [2]int = [2]int{1, 2}fmt.Println(len(arr), cap(arr))arr2 := [...][2]int{{1, 2}, {3, 4}} //二维数组,其中一维数组是它的元素fmt.Println(len(arr2), cap(arr2))
}

注意:string底层是byte数组([]byte),len一个string类型的遍历,得到的是byte数组的长度。 

        4. 多维数组遍历 

package mainimport "fmt"func main() {arr2 := [...][2]int{{1, 2}, {3, 4}} //二维数组,其中一维数组是它的元素//使用内置函数lenfor i := 0; i < len(arr2); i++ {for j := 0; j < len(arr2[i]); j++ {fmt.Printf("arr2[%d][%d] = %d ", i, j, arr2[i][j])}}fmt.Println()//使用rangefor index1, v1 := range arr2 {for index2, v2 := range v1 {fmt.Printf("arr2[%d][%d] = %d ", index1, index2, v2)}}
}

 5. 数组拷贝和传参

        使用指针传参。

6. 数组练习

  • 求数组所有元素之和

package mainimport ("fmt""math/rand""time"
)func sumArr(a [10]int) int {sum := 0for i, v := range a {fmt.Printf("arr[%d]=%d ", i, v)sum += v}fmt.Println()return sum
}func main() {//随机数种子rand.Seed(time.Now().Unix())var b [10]intfor i := 0; i < len(b); i++ {b[i] = rand.Intn(1000) //产生一个0到1000的随机数}sum := sumArr(b)fmt.Println(sum)
}
  • 找到数组中和为给定值的两元素下标
package mainimport "fmt"func myTest(arr [6]int, val int) {for i := 0; i < len(arr); i++ {for j := len(arr) - 1; j > i; j-- {if arr[i]+arr[j] == val {fmt.Printf("(%d, %d)", i, j)}}}
}func main() {arr := [...]int{1, 2, 3, 4, 5, 6}myTest(arr, 8)
}

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

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

相关文章

认识Testbench仿真激励

一、认识Testbench Bench有平台之意&#xff0c;所以Testbench就是测试平台的意思。 任何一个被测模块&#xff0c;都有输入和输出&#xff0c;此模块是否合格的判断依据&#xff0c;就是在满足输入要求的情况下&#xff0c;能否得到符合预期的输出。我们把被测模块称作UUT&…

docker镜像ssh服务

基于commit命令实现 首先我们是基于Ubuntu:18.04版本做ssh服务&#xff0c;拉取镜像 [rootmaster ~]# docker pull ubuntu:18.04 [rootmaster ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 f9a80a5…

Kafka问题纪要

1. 取 如何获取 topic 主题的列表 bin/kafka-topics.sh --list --zookeeper localhost:2181 2. 生产者和消费者的命令行是什么&#xff1f; 生产者在主题上发布消息&#xff1a; bin/kafka-console-producer.sh --broker-list 192.168.43.49:9092 --topicHello-Kafka 注意这…

vue3 el-form中嵌套el-tabale 对输入动态校验

简单案例 <el-form :model"Form" :rules"rules" ref"FormRef" class"formDiv"><el-table :data"Form.copyWriters" style"width: 100%"><el-table-column label"文案链接"><temp…

rancher是什么

Rancher Labs是制作Rancher的公司。Rancher Labs成立于2014年&#xff0c;是一家专注于企业级容器管理软件的公司。它的产品设计旨在简化在分布式环境中部署和管理容器的过程&#xff0c;帮助企业轻松地采用容器技术和Kubernetes。Rancher Labs提供的Rancher平台支持Docker容器…

H5 简单四按钮个人主页源码

源码名称&#xff1a;简单四按钮个人主页源码 源码介绍&#xff1a;一款简单的带4个按钮选项的个人主页源码&#xff0c;可自行修改内容作为自己的个人主页。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.changyouzuhao.cn/11458.html

DeepMind推出SIMA:一款在3D虚拟环境中展现强大泛化能力的通用AI代理

【技术框架概述】: SIMA(Scalable Instructable Multiworld Agent)是一种通用的 AI 代理系统,旨在在多种视频游戏环境中执行任务,并能够通过自然语言指令进行操作。它包含了预先训练的视觉模型和主模型,可以使用键盘和鼠标操作游戏中的角色。 【定位】:SIMA的定位是成…

ubuntu 23.04 安装 中文输入法

1、安装 fcitx sudo apt install fcitxfcitx 安装好后&#xff0c;可以使用 fcitx-configtool 命令进行配置&#xff0c;其界面如下所示。在这里可以配置不同输入法的切换快捷键&#xff0c;默认输入法等。刚安装系统后&#xff0c;这里只有一个输入法&#xff0c;所以接下来要…

Mysql将datetime数据转为Data/Char

打印当前日期&#xff1a; SELECT NOW();datetime转Date SELECT CONVERT(NOW(), DATE);datetime转字符 SELECT CONVERT(NOW(),char);datetime直接转日期格式的字符 方法1&#xff1a; SELECT CONCAT(CONVERT (Now(), DATE), "");方法2&#xff1a; SELECT DATE_…

元宇宙崛起:区块链与金融科技共绘数字新世界

文章目录 一、引言二、元宇宙与区块链的深度融合三、区块链在元宇宙金融中的应用四、金融科技在元宇宙中的创新应用五、面临的挑战与机遇《区块链与金融科技》亮点内容简介获取方式 一、引言 随着科技的飞速发展&#xff0c;元宇宙概念逐渐走进人们的视野&#xff0c;成为数字…

C语言入门到精通之练习54:猴子吃桃问题(附带源码)

一只小猴子一天摘了许多桃子&#xff0c;第一天吃了一半&#xff0c;然后忍不住又吃了一个&#xff1b;第二天又吃了一半&#xff0c;再加上一个&#xff1b;后面每天都是这样吃。到第10天的时候&#xff0c;小猴子发现只有一个桃子了。问小猴子第一天共摘了多少个桃子。 实例…

先进电气技术 —— 片上宽禁带器件的集成与应用

一、背景 功率转换器设计的一个关键目标是降低功率损耗以提高转换效率&#xff0c;这对可再生能源等应用产生影响。通过降低功率损耗&#xff0c;可以减小变换器元件的尺寸&#xff0c;从而使整个变换器的尺寸更小。因此&#xff0c;转换器的大小和成本完全取决于设计要求和应…

Linux:kubernetes(k8s)prestop事件的使用(11)

他的作用是在结束pod容器之后进行的操作 apiVersion: v1 # api文档版本 kind: Pod # 资源对象类型 metadata: # pod相关的元数据&#xff0c;用于描述pod的数据name: nginx-po # pod名称labels: # pod的标签type: app #这个是随便写的 自定义的标签version: 1.0.0 #这个…

2024年谷歌SEO的趋势预测及应对建议(川圣SEO)#蜘蛛池

baidu搜索&#xff1a;如何联系八爪鱼SEO&#xff1f; baidu搜索&#xff1a;如何联系八爪鱼SEO&#xff1f; baidu搜索&#xff1a;如何联系八爪鱼SEO&#xff1f; 虽然说“SEO”已死这个口号已经喊了很多年了&#xff08;最终也没死&#xff09;&#xff0c;但是在2023年很…

前端定义了全局变量后,再定义一个同名的局部变量

先说结论&#xff1a;不要这样定义&#xff0c;不然会发生莫名其妙的错误。 问题叙述 前端定义了全局变量 var selectedSheet; 在后面的函数中又定义局部变量 function switchToSheet() {var selectedSheet document.getElementById(selectSheet).value;fetch(/get_data)…

mysql中的非空间数据导入sqlserver中空间化

以下操作都在Navicat Premium 15软件中操作 1、mysql导出数据 以导出csv为例 不修改导出路径的话默认就是在桌面 设置编码UTF-8 这边还是默认,最好不要修改,如果文本识别符号为空,导入的时候可能字段会错乱 开始即可 2、导入sqlserver数据库中

STM32---ADC

ADC 概念 众所周知&#xff0c;GPIO只能读入高电平或者低电平&#xff0c;那如果现有一个模拟量&#xff0c;该如何读取呢&#xff0c;比如电压的范围是0~3.3v&#xff0c;如何获取电压的值。就需要ADC&#xff08;Analog-Digital Converter&#xff09;了。ADC可以将引脚上连…

Linux环境下用IDEA运行Golang记录

一、背景 和存储同时开发AI项目&#xff0c;在Linux环境运行Golang项目&#xff0c;因此需要进行相关的配置。 二、Golang安装 参考&#xff1a;【Linux — 安装 Go】Linux 系统安装 Go 过程总结_linux 安装go-CSDN博客 三、IDEA中Golang配置 1、去除代理 否则在Plugins中…

4.MAC平台Python的下载、安装(含Python2.7+Python3.12双版本环境变量配置)——《跟老吕学Python编程》

4.MAC平台Python的下载、安装&#xff08;含Python2.7Python3.12双版本环境变量配置&#xff09;——《跟老吕学Python编程》&#xff09;——跟老吕学Python编程 一、下载MAC版Python1.Python官网2.MAC版Python下载网址 二、在MAC安装Python1.在MAC安装Python2.阅读Python重要…

数据结构与算法之美学习笔记:不定期福利第三期 | 刘超:我是怎么学习《数据结构与算法之美》的?

目录 前言 前言 本节课程思维导图&#xff1a; 你好&#xff0c;我是刘超&#xff0c;是隔壁《趣谈网络协议》专栏的作者。今天来“串个门儿”&#xff0c;讲讲我学习《数据结构与算法之美》这个专栏的一些体会和感受。 《数据结构与算法之美》是目前“极客时间”订阅量最多的…