go语言数组如何初始化问题? - 知乎

GO语言基础教程(50)Go数组之数组的初始化:当数组学会“七十二变“:GO语言数组初始化全揭秘,原来代码可以这么玩! 你以为Go语言的数组只是枯燥的数据容器?那你就大错特错了!这篇文章将带你深入探索Go数组初始化的五种神奇姿势——从基础的var声明到高能的字面量初始化,从让编译器自动计算长度到[...]的巧妙用法,每个技巧都配有完整可运行的代码示例。无论你是刚入门的Go新手还是想要巩固基础的老鸟,这篇充满网感和幽默的深度解析都能让你在笑声中掌握数组的精髓,写出更优雅、更高效的Go代码,告别数组初始化时的选择困难症! 阅读详情

数组

数组是相同数据类型的一组长度固定的序列,类型可以是整形、字符串和浮点型等,数组元素可以通过索引来读取或者修改,索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推,最后一个元素的索引为数组长度减1。

示意图

数组声明

声明数组必须指定元素类型和数组长度,数组一旦声明,长度就不可变。

语法:

代码示例:

package main

import "fmt"

func main() {
 var intArr [5]int     // 声明一个长度为5的int类型数组
 var floatArr [5]float32    // 声明一个长度为5的float32类型数组
 var strArr [5]string    // 声明一个长度为5的string类型数组
 var boolArr [5]bool     // 声明一个长度为5的bool类型数组
 fmt.Println(intArr)
 fmt.Println(floatArr)
 fmt.Println(strArr)
 fmt.Println(boolArr)
}

由于只是声明了数组,并没有给数组初始化,所以输出均是打印的其类型相对应的默认值。

运行结果:

运行结果

数组初始化

数组初始化时,可以在声明数组时使用大括号{}初始化,或者在数组声明完成之后使用索引对数组中指定位置的元素进行初始化,在指定了数组长度的情况下,初始化中的数组个数不能超过数组长度。

var intArr = [5]int{1, 2, 3, 4, 5}

如果数组长度不确定,可以使用...代替数组长度,编译器在编译时会根据元素个数自动推断数组长度。

var floatArr = [...]float32{1.0, 2.0, 3.0, 4.0, 5.0}

在数组声明之后,可使用索引的方式初始化数组中的元素,索引从0开始,最后一个元素索引为长度减1,不能超过最后一个元素的索引。

var strArr [5]string
strArr[0] = "A"
strArr[1] = "B"
strArr[2] = "C"
strArr[3] = "D"
strArr[4] = "E"

数组访问和遍历

访问数组中的元素可以使用数组名加中括号[],在中括号中指定元素索引的方式访问,使用索引访问元素时,索引不能超过数组的长度减1。

代码示例:

package main

import "fmt"

func main() {
 var intArr = [5]int{1, 2, 3, 4, 5}
 fmt.Println("第1个元素是:", intArr[0])
 fmt.Println("第2个元素是:", intArr[1])
 fmt.Println("第3个元素是:", intArr[2])
 fmt.Println("第4个元素是:", intArr[3])
 fmt.Println("第5个元素是:", intArr[4])
}

运行结果:

运行结果

通过数组索引的方式访问数组方便简洁,但是如果数组长度太长,使用索引的方式访问就不太优雅,这时候就需要使用到数据遍历的功能,数组遍历可以使用for循环的方式进行遍历。

代码示例:

package main

import "fmt"

func main() {
 var intArr = [5]int{1, 2, 3, 4, 5}
 for i := 0; i < len(intArr); i++ {
  fmt.Printf("第%d个元素是: %d \n", i + 1, intArr[i])
 }
}

使用for循环的方式遍历数组intArr,输出结果和上面索引方式一样。

除了使用这种for循环之外,还可以使用for range方式的循环来遍历数组,使用for range遍历更加方便

for range使用方式见之前内容。

代码示例:

package main

import "fmt"

func main() {
 var intArr = [5]int{1, 2, 3, 4, 5}
 for i, v := range intArr {
  fmt.Printf("第%d个元素是: %d \n", i + 1, v)
 }
}

使用该方法输出结果同上面一样。

二维数组

前面所提到的都是一位数组,在go语言中,还有多维数组的概念,但是多维数组中使用到的最多的就是二维数组,所谓二维数组,其本质上可以看做是多个一位数组组成的。

示意图

如上图所示,就是一个简单的二维数组,可以将该二维数组看做是由三个一维数组所组成,就构成了一个表格的形式,访问二维数组需要指定行索引和列索引,且索引都是从0开始,可以使用arr[i][j]来访问,i表示行,j表示列。

二维数组声明和一维数组类似:

二维数组声明:

二维数组声明并初始化:

package main

import "fmt"

func main() {
 intArr := [3][4]int{
  {0, 1, 2, 3} ,    // 第一行
  {4, 5, 6, 7} ,    // 第二行
  {8, 9, 10, 11},   // 第三行
 }
 fmt.Println(intArr)
}

运行结果:

运行结果

二维数组可以使用arr[i][j]方式进行访问,i表示行,j表示列,i和j都不能超过索引。

代码示例:

package main

import "fmt"

func main() {
 intArr := [3][3]int{
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9},
 }
 fmt.Println("第1行第1列:", intArr[0][0])
 fmt.Println("第1行第2列:", intArr[0][1])
 fmt.Println("第1行第3列:", intArr[0][2])
 fmt.Println("第2行第1列:", intArr[1][0])
 fmt.Println("第2行第2列:", intArr[1][1])
 fmt.Println("第2行第3列:", intArr[1][2])
 fmt.Println("第3行第1列:", intArr[2][0])
 fmt.Println("第3行第2列:", intArr[2][1])
 fmt.Println("第3行第3列:", intArr[2][2])
}

运行结果:

运行结果

二维数组同样可以使用for循环进行遍历,一维数组使用一个for循环进行遍历,二维数组则使用两个for嵌套循环即可遍历。

代码示例:

package main

import "fmt"

func main() {
 intArr := [3][3]int{
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9},
 }
 for i := 0; i < len(intArr); i++ {   // len(intArr)获取到的是intArr的行数,intArr[i] 表示一个一维数组
  for j := 0; j < len(intArr[i]); j++ { // 按照一维数组的方式遍历即可
   fmt.Printf("第%d行第%d列:%d \n", i + 1, j + 1, intArr[i][j])
  }
 }
}

该方法使用两个for循环嵌套,外层循环控制二维数组的行数,len(intArr)获取到的是二维数组的总行数,内层循环控制二维数组的列数,len(intArr[i])获取到的是二维数组当前行的列数,运行结果和上面一样。

使用for range:

package main

import "fmt"

func main() {
 intArr := [3][3]int{
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9},
 }
 for i, v := range intArr {  // 直接循环intArr,获取到的每一个v为一个一维数组
  for i1, v1 := range v {  // 按照一维数组的方式遍历即可
   fmt.Printf("第%d行第%d列:%d \n", i + 1, i1 + 1, v1)
  }
 }
}

运行结果同上。

Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组 1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语法格式如下: var variable_name [SIZE] variable_type 例如以下定义了数组 balance 长度为 10 类型为 float32: var balance [10...... 阅读详情

相关推荐

小程序选项卡以及swiper套用(跨页面)

选项卡tab和swpier之间的套用 其实我之前写过一篇选项卡的切换demo,大家阔以参考一下 小程序多个选项卡切换 那今天写这个demo呢,是因为项目需求,所以仅供参考。 我是拿到了home.wxml的数组下标, 通过url传参的方式去将这个id传到下一个页面, 下一个页面接收以后再将id赋值给对应的tabI或者currentId(swiper 的下标) 实现上一个页面进来以后直接进入对应的页...

Rechal_Mei的博客 3597

Golang:数组定义、初始化

概述 golang中的数组与其他一些语言中的数组,不同点在于:golang中的数组是值类型,并非是基础数据类型,这一点很重要。 可以使用指针来对数组进行引用传递。 数组初始化之后,长度确定,每个元素的值为数组类型的默认值。 数组的地址与数组的第一个元素的地址一致。 除数组第一个元素外的其他元素的地址=前一个元素的地址+数组类型所占用的字节数,即数组中的元素地址是连续的。 所以当我们使用print打印数组的时候,数组的第一个元素地址即可代表该数组的地址,根据第一个元素的地址,可以得出之后每一个

保暖透气大裤衩LeoLee的博客 5466

3D Slicer + MONAI Bundle实战:如何用Wholebrainseg模型快速分割133个脑区(附避坑指南)

本文详细介绍了如何利用MONAI Model Zoo中的Wholebrainseg模型,在3D Slicer环境中高效分割133个脑区。文章重点提供了数据预处理、GPU推理加速及结果精修等实战技巧与避坑指南,旨在帮助医学影像研究者和开发者提升全脑分割的精度与效率。

311

Go 语言中的数组:声明、初始化与应用

在 Go 语言中,数组是一个具有固定长度和类型的数据项序列。数组的长度被定义为类型的一部分,因此[5]int和[10]int被视为不同的类型。数组在声明时会根据指定的顺序进行初始化,每个元素默认为其类型的零值。

栗筝i的博客 4390

TC397 EB配置ADC软件触发:从零实现周期采样与中断处理

本文详细介绍了如何在Infineon AURIX TC397芯片上使用EB Tresos工具配置ADC软件触发,实现周期采样与中断处理。通过硬件连接、EB模块配置、代码初始化及数据处理的全流程解析,帮助开发者快速掌握ADC软件触发技术,提升嵌入式系统开发效率。

root9的博客 231

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程)

本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。

weixin_29305313的博客 509

【Golang】Go语言数组定义与初始化方式

Go语言数组定义与初始化 数组的定义 var 数组变量名 [元素数量]T 比如:var a [5]int。 注意数组的长度必须是常量,且长度属于数组类型的一部分,定义之后不允许修改长度。 因此 [5]int和[10]int是不同的类型。 var arr1 [3]int var arr2 [4]int arr1 = arr2 //错误,此时arr1和arr2是不同的类型 数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1。 数组的初始化方式 数组的初始化方式有很多。 方式一 func

小菜鸡的博客 1万+

OpenMontage:AI代理驱动的端到端视频生产系统实战指南

在当今内容创作领域,自动化视频生成技术正成为提升生产效率的关键。其核心原理在于通过智能体(Agent)架构,将复杂的视频制作流程拆解为可被AI理解和执行的标准化任务,从而实现从创意到成片的端到端自动化。这项技术的核心价值在于大幅降低了专业视频制作的门槛,使非专业用户也能快速产出具有一定专业度的内容。其典型应用场景包括社交媒体短片、产品演示、知识科普视频的批量生产。OpenMontage正是这一技术理念的杰出实践,它构建了一个完整的代理驱动视频生产系统,将AI编码助手转变为能自主规划并执行脚本撰写、素材检索、

weixin_35757191的博客 648

Go语言中的数组

数组的内存布局是线性的,即数组的每个元素在内存中是连续存储的。数组的第一个元素存储在内存的起始位置,第二个元素紧随其后,依此类推。当声明一个数组时,Go 语言会在内存中分配一块连续的内存区域,用于存储数组的元素。在 Go 语言中,数组是值类型,这意味着当数组作为参数传递给函数时,会进行一次完整的复制。数组是一个固定长度的、相同类型的元素序列,其内存布局是连续的。每个元素的内存地址可以通过数组的基地址(即数组的第一个元素的地址)加上元素的索引和元素类型的大小来计算。的一个副本,因此修改副本不会影响原始数组。

Maisule的博客 349

大模型——Dify:知识库与外部知识库

摘要 Dify的知识库功能为开发者提供了动态知识管理解决方案,超越了大模型静态预训练数据的限制。知识库支持多种文档格式(如txt、pdf、docx等),通过文档分段、索引设置和检索优化机制提升LLM的响应准确性。系统提供高质量和经济两种索引模式,前者采用向量化检索技术,后者使用关键词匹配以降低成本。知识库支持元数据管理,包括自动生成的内置元数据和用户自定义元数据,便于内容分类和检索。对于高级需求,Dify还支持连接外部知识库,通过API实现跨平台数据共享和检索优化,满足企业级知识管理需求。

732

交换机端口模式详解:Access、Hybrid、Trunk

交换机是网络中至关重要的组件之一,用于连接各种设备并启用数据的高效流动。为了更好地管理和控制网络流量,交换机提供了不同的端口模式,其中包括Access、Hybrid和Trunk。本文将深入探讨这三种端口模式,详细解释它们的配置、特性和应用场景,以帮助网络管理员更好地理解和优化网络架构。

网络技术联盟站 4016

golang 初始化并赋值_Go语言创建、初始化数组的常见方式汇总

本文实例总结了Go语言创建、初始化数组的常见方式。分享给大家供大家参考。具体分析如下:Go语言的语法很灵活,以下展示了创建并初始化数组的多种方式://数组初始化的各种方式func arraySliceTest0201() {//创建数组(声明长度)var array1 = [5]int{1, 2, 3}fmt.Printf("array1--- type:%T \n", array1)rangeI...

weixin_39562089的博客 4133

ISO21434 组织网络安全管理(二)

为了实现网络安全工程,该组织建立并维护网络安全治理和网络安全文化,包括网络安全意识管理、能力管理和持续改进。这涉及到指定针对本文档的目标进行独立审计的特定于组织的规则和过程。 为了支持网络安全工程,该组织实施了网络安全的管理系统,包括管理工具和应用质量管理系统。

qq_42357877的博客 1322

100天精通Golang(基础入门篇)——第10天:Go语言中的数组

本篇文章是100天"学习Golang"系列文章的第10篇,主要介绍了Go语言中的数组以及数组的语法、多维数组、数组是值类型等内容。通过阅读本篇文章,读者能够了解到如何在Go语言中定义和使用数组,并掌握一些实用的代码技巧。Go语言是一种现代的、快速、并发的编程语言,由于其简单的语法和高效的执行效率,越来越受到广大开发者的青睐。本篇文章是100天学习Golang的第一篇,旨在为初学者提供一份关于Go语言数组的基础入门指南。我们将从数组的定义开始,详细介绍各种语法和技巧,帮助读者快速掌握Go语言数组的基础知识。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 5万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Go】Go语言 数组

文章目录一、简介二、优势三、数组的声明四、数组的初始化1. 声明的同时初始化2. 使用赋值操作符初始化声明数组3. 一维数组的初始化方法总结:4. 多维数组的初始化方法总结:五、数组元素的访问六、获得数组长度七、向函数传递数组注意:值拷贝行为会造成性能问题,通常会建议使用 slice,或数组指针:1. 使用 return 稍作改进2. 使用数组指针传参参考链接 一、简介 数组是一段长度固定的连续内存区域,拥有0 个或多个(不超过数组长度)相同数据类型的数据项序列。其中元素类型支持任意内置类型,这种类型可以

weixin_44211968的博客 3874

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Go语言基础之数组

文章目录Go语言基础之数组Array(数组)数组定义:数组的初始化方法一方法二方法三数组的遍历多维数组二维数组的定义二维数组的遍历数组是值类型练习题 Go语言基础之数组 本文主要介绍Go语言中数组(array)及它的基本使用。 Array(数组) 数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法: // 定义一个长度为3元...

Allen 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Go 数组: 定义及初始化 结构体数组 多维数组 数组和指针

数组的定义及初始化 func main() { var a [4]int //按数组长度自动初始化为0 var aa [4]int = [4]int{1, 2, 3, 4} var aaa = [4]int{1, 2, 3, 4} //定义并初始化 b := [4]int{2, 5} //按数组长度,没有初始化的自动初始化为0 c := [4]int{5, 3: 10} e := [...]int{10, 2: 100} d := [...]int{1, 2, 3} fmt.Println

Wang_liixue的博客 5802

Go 语言数组

Go 语言提供了数组类型的数据结构。数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。相对于去声明的变量,使用数组形式更加方便且易于扩展。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。

zhangfang68的博客 1016

Go语言自学系列 | golang切片的初始化

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 切片的初始化方法很多,可以直接初始化,也可以使用数组初始化等。 切片如何切分 package main import "fmt" // 切片 func test1() { var s1 = []int{1, 2, 3,

团爸讲算法 8311

Go语言数组

Go语言数组 GO语言学习教程 www.lsdcloud.com 1 概述 固定长度,数组声明后长度便不能再修改 只能存储一种特定类型元素的序列 2 语法 编号 方式 代码示例 1 直接声明 var arr [3]int 2 make arr:=make([]int,3) 3 字面量 arr:=[3]int{1,2,3} 4 自动识别长度 arr:=[…]int{1...

ourLang 1万+

Go语言自学系列 | golang数组

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 数组是相同数据类型的一组数据的集合,数组一旦定义长度不能修改,数组可以通过下标(或者叫索引)来访问元素。 go语言数组的定义 数组定义的语法如下: var variable_name [SIZE] variable_type

团爸讲算法 2883

Golang 学习八(Go 数组)

文章目录1. 数组介绍2. 声明数组3. 初始化数组4. 访问数组元素5. 多维数组 1. 数组介绍 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。 相对于去声明 number0, number1, ... number99 的变量,使用数组形式 numbers[0], numbers[1]...numbers[99] 更加方便且易于扩展。 数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二

shenyuanhaojie的博客 2534

Golang基础语法(go语言结构体、go语言数组与切片、go语言条件句、go语言循环)

本文介绍了Go语言中结构体、数组与切片、条件语句和循环的基本用法。结构体部分讲解了如何定义Student结构体,并通过键值对和值列表两种方式初始化结构体,以及如何访问结构体成员。数组与切片部分展示了数组初始化、切片创建和字典定义的方法。条件语句部分演示了if条件判断和switch语句的使用,包括map值判断和fallthrough关键字。循环部分虽未详细展开,但整体内容为Go语言基础语法入门提供了实用参考。这些基础知识为后续深入学习Go语言编程奠定了基础。

Atticus的博客 1083

Go 声明数组 语言数组

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。相对于去声明的变量,使用数组形式更加方便且易于扩展。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。

akozmcq90249hq的博客 917

六、Go语言快速入门之数组和切片

由于6大于5,Go 语言会分配一个新的底层数组来容纳这6个元素,并将新切片的指针指向这个新数组。然后,它会复制原切片中的元素到新数组中,并更新新切片的长度和容量。⭐️ 切片的长度代表着切片中元素的个数,切片的容量代表着切片总共能装多少个元素,切片与数组最大的区别在于切片的容量会自动扩张,而数组不会。⭐️ 一个切片由三个部分组成,指针、长度、容量,指针指向第一个切片元素对于的底层数组元素地址,但是并不一定就是数组的一个元素。⭐️ 切片的底层指向一个数组,该数组的实际体积可能要大于切片所定义的体积。

qq_52122458的博客 1886

Go语言入门之数组切片

容量小于256时,两倍扩容容量大于等于256时,按照这个公式扩容实际的容量,在上述的基础上,还会进行内存对齐。

clisks的博客 1441
上一篇: yarn 安装与更换源 - develon - 博客园
下一篇: WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
赢阡
博客等级 码龄10年 6粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赢阡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值