go数组的声明和初始化

news2025/3/7 1:47:44

1.数组简介

数组是可以存放多个同一类型的数据。数组也是一种数据类型,在go中,数组是值类型。数组的长度也是数组类型的一部分,所以[2]int和[3]int属于不同的数据类型。

2.数组的长度也是类型的一部分

    var arr1 [2]int
	var arr2 [3]int
	fmt.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]int
	intarr[0] = 1
	intarr[1] = 2
	intarr[2] = 3
	fmt.Println(intarr)

	var strarr [3]string
	strarr[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 := arr
	arr[0] = 10
	fmt.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 = 0
	for 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 := 0
	maxvalue := arr[0]

	for key, value := range arr {
		if value > maxvalue {
			maxkey = key
			maxvalue = value
		}
		
	}
	fmt.Printf("最大值::%d,下标:%d\n", maxvalue, maxkey)

结果:最大值::99,下标:3

练习三:创建一个byte类型的数组,分别存放'A'-'Z',使用for循环遍历.

var mychars [26]byte
	for 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{} 不支持

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

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

相关文章

初识Qt · 信号与槽 · 基础知识

目录 前言&#xff1a; 信号和槽初识 两个问题 前言&#xff1a; 本文我们正式开始介绍信号与槽这个概念&#xff0c;在谈及Qt中的信号与槽这个概念之前&#xff0c;我们不妨回顾一下Linux中的信号&#xff0c;比如发生了除0错误&#xff0c;OS就会给该进程发送一个信号&am…

Java高频面试之集合-03

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;说说ArrayList和LinkedList的区别 ArrayList 与 LinkedList 的详细对比 一、底层数据结构 特性ArrayListLinkedList存…

宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪

2025年3月5日&#xff0c;机器人行业龙头宇树科技&#xff08;Unitree&#xff09;在深圳再添新动作——全资子公司深圳天羿科技有限公司正式成立。这家注册资本10万元、法定代表人周昌慧的新公司&#xff0c;聚焦智能机器人研发与销售&#xff0c;标志着宇树科技在华南市场的战…

【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)

背景&#xff1a; 已经用这个脚本的记得设置Wifi时候&#xff0c;关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开&#xff0c;一天要重新连接&#xff0c;点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本&#xff0c;那样我就可以解放双手&…

计算机毕业设计SpringBoot+Vue.js电商平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【杂谈】信创电脑华为w515(统信系统)登录锁定及忘记密码处理

华为w515麒麟芯片版&#xff0c;还有非麒麟芯片版本&#xff0c;是一款信创电脑&#xff0c;一般安装的UOS系统。 准备一个空U盘&#xff0c;先下载镜像文件及启动盘制作工具&#xff0c;连接如下&#xff1a; 百度网盘 请输入提取码 http://livecd.uostools.com/img/apps/l…

初始提示词(Prompting)

理解LLM架构 在自然语言处理领域&#xff0c;LLM&#xff08;Large Memory Language Model&#xff0c;大型记忆语言模型&#xff09;架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…

Vue+el-upload配置minIO实现大文件的切片并发上传、上传进度展示、失败重试功能

vue3el-upload实现切片上传 效果图 初始界面 上传中的界面 上传完成的界面 上传失败的界面 <template><div><el-uploadclass"BigFileUpload"ref"uploadRef"action"#"drag:show-file-list"false":on-change"…

正则表达式梳理(基于python)

正则表达式&#xff08;regular expression&#xff09;是一种针对字符串匹配查找所定义的规则模式&#xff0c;独立于语言&#xff0c;但不同语言在实现上也会存在一些细微差别&#xff0c;下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…

【仿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 优先级 一、关系代数的概念 关系代数是一种抽象的数据查询语言用对关系的运算来表达查询 运算对象&#xff1a;关系运算符&#xff1a;4类运算结果&#xff1a;…

ubuntu20 安装python2

1. 确保启用了 Universe 仓库 在某些情况下&#xff0c;python2-minimal 包可能位于 Universe 仓库中。你可以通过以下命令启用 Universe 仓库并更新软件包列表&#xff1a; bash复制 sudo add-apt-repository universe sudo apt update 然后尝试安装&#xff1a; bash复制…

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…

最新Spring Security实战教程(一)初识Spring Security安全框架

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

告别GitHub连不上!一分钟快速访问方案

一、当GitHub抽风时&#xff0c;你是否也这样崩溃过&#xff1f; &#x1f621; npm install卡在node-sass半小时不动&#x1f62d; git clone到90%突然fatal: early EOF&#x1f92c; 改了半天hosts文件&#xff0c;第二天又失效了... 根本原因&#xff1a;传统代理需要复杂…

Leetcode 1477. 找两个和为目标值且不重叠的子数组 前缀和+DP

原题链接&#xff1a; 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之前的满足要求…

R语言绘图:韦恩图

韦恩分析 韦恩分析&#xff08;Venn Analysis&#xff09;常用于可视化不同数据集之间的交集和并集。维恩图&#xff08;Venn diagram&#xff09;&#xff0c;也叫文氏图、温氏图、韦恩图、范氏图&#xff0c;用于显示元素集合重叠区域的关系型图表&#xff0c;通过图形与图形…

智谱AI-FunctionCall

智谱AI-FunctionCall 编写FuncationCall大模型的函数调用&#xff0c;先直观的感受一下的感受下FunctionCall的魅力 文章目录 智谱AI-FunctionCall[toc]1-参考网址2-思路整理3-代码拆件1-[非核心]两个业务函数2-[非核心]业务函数的JsonSchema定义3-[核心]FunctionCall的调用1-打…

android亮灭屏流程分析

前言 亮灭涉及的东西非常多&#xff0c;因此单独写一个文档&#xff0c;进行详细说明&#xff0c;亮灭屏包括的东西不只是亮灭屏&#xff0c;还包括亮度调节、屏幕状态变化等东西。本文仅作学习使用&#xff0c;不涉及商业&#xff0c;侵权请联系删除。 framework层的学习链接…