Golang基础-4
Go语言基础
介绍
基础
介绍
- 本文介绍Go语言中数组(array)操作(数组声明、元素访问与修改、数组遍历、关系运算、切片创建、多维数组)等相关知识。
基础
数组
- 数组是具有相同数据类型的数据元素组成的一组长度固定的序列,数组的长度必须是非负整数的常量,长度也是类型的一部分。
- 数组声明后,其数据类型与元素数量固定不可变。
数组声明
package mainimport "fmt"func main() {// 声明数组var arr0 [5]float32fmt.Printf("%T, %v\n", arr0, arr0)// 声明并初始化数组,指定数组长度var arr1 [5]int = [5]int{1, 2, 3, 4, 5}fmt.Printf("%T, %v\n", arr1, arr1)// 自动推导参数类型,初始化前三个元素,后两个默认为空arr2 := [5]string{"fsd", "fdsds", "fds"}fmt.Printf("%T, %v\n", arr2, arr2)// 数组长度不确定时自动推导arr3 := [...]byte{'A', 'B'}fmt.Printf("%T, %c\n", arr3, arr3)// 指定元素位置初始化arr4 := [5]int{0: 10, 3: 13, 4: 14}fmt.Printf("%T, %v\n", arr4, arr4)// 数组长度不确定时,指定元素位置初始化并自动推导arr5 := [...]int{0: 1, 4: 3}fmt.Printf("%T, %v\n", arr5, arr5)
}
输出结果
[5]float32, [0 0 0 0 0]
[5]int, [1 2 3 4 5]
[5]string, [fsd fdsds fds ]
[2]uint8, [A B]
[5]int, [10 0 0 13 14]
[5]int, [1 0 0 0 3]
数组声明
- 通过数组下标(索引位置)来访问或修改数组的元素
- 数组的起始索引从0开始
package mainimport "fmt"func main() {var arr [5]int = [5]int{1, 2, 3, 4, 5}fmt.Println(arr)// 以索引访问数组fmt.Println("arr[0] = ", arr[0])fmt.Println("arr[1] = ", arr[1])fmt.Println("arr[2] = ", arr[2])fmt.Println("arr[3] = ", arr[3])fmt.Println("arr[4] = ", arr[4])// 修改数组arr[0] = 100arr[1] = 200arr[4] = 300fmt.Println("arr[0] = ", arr[0])fmt.Println("arr[1] = ", arr[1])fmt.Println("arr[2] = ", arr[2])fmt.Println("arr[3] = ", arr[3])fmt.Println("arr[4] = ", arr[4])
}
输出结果
[1 2 3 4 5]
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
arr[0] = 100
arr[1] = 200
arr[2] = 3
arr[3] = 4
arr[4] = 300
数组遍历
- 使用 for循环遍历数组
package mainimport "fmt"func main() {var arr [5]int = [5]int{1, 2, 3, 4, 5}fmt.Println(arr)// 获取数组大小fmt.Println(len(arr))// for循环遍历for i := 0; i < len(arr); i++ {fmt.Println("arr[", i, "] = ", arr[i])}fmt.Println("========================")// for-range遍历for i, v := range arr {fmt.Println("arr[", i, "] = ", v)}
}
输出结果
[1 2 3 4 5]
5
arr[ 0 ] = 1
arr[ 1 ] = 2
arr[ 2 ] = 3
arr[ 3 ] = 4
arr[ 4 ] = 5
========================
arr[ 0 ] = 1
arr[ 1 ] = 2
arr[ 2 ] = 3
arr[ 3 ] = 4
arr[ 4 ] = 5
关系运算
- 可判断同数据类型数组间是否相同(==、!=)
package mainimport "fmt"func main() {var arr [5]int = [5]int{1, 2, 3, 4, 5}fmt.Println("== ", arr == [...]int{1, 2, 3, 4, 5})fmt.Println("!= ", arr != [...]int{1, 2, 3, 4, 5})
}
输出结果
== true
!= false
切片创建
- array[start : end] 或 array[start : end : cap](end<=cap<=len)获得部分元素做为切片
package mainimport "fmt"func main() {var arr [5]int = [5]int{1, 2, 3, 4, 5}// 获取数组长度和数组容量fmt.Printf("arr len: %v, cap: %v\n", len(arr), cap(arr))fmt.Println("=====================")// 从数组创建切片,array[start:end]s1 := arr[0:2]fmt.Printf("s1 type: %T, value: %v, len: %v, cap: %v\n", s1, s1, len(s1), cap(s1))// 从数组创建切片,array[start:end:cap]s2 := arr[0:1:2]fmt.Printf("s2 type: %T, value: %v, len: %v, cap: %v\n", s2, s2, len(s2), cap(s2))
}
输出结果
arr len: 5, cap: 5
=====================
s1 type: []int, value: [1 2], len: 2, cap: 5
s2 type: []int, value: [1], len: 1, cap: 2
多维数组
- 数组的元素也可以是数组类型,这就是多维数组
- 多维数组声明
package mainimport "fmt"func main() {// 声明一个二维数组var arr [2][2]int = [2][2]int{}fmt.Println("arr: ", arr)// 声明一个二维数组,并初始化var arr1 [2][3]int = [2][3]int{{1, 2, 3}, {4, 5, 6}}fmt.Println("arr1: ", arr1)// 自动推导类型arr2 := [2][2]int{}fmt.Printf("arr2 type: %T, value: %v\n", arr2, arr2)// 多维数组只有第一维长度可使用变量数自动推导arr3 := [...][3]int{{1, 2, 3}, {4, 5, 6}}fmt.Printf("arr3 type: %T, value: %v\n", arr3, arr3)// 按数组第一维索引初始化arr4 := [3][3]int{0: {1, 1, 1}, 2: {3, 3, 3}}fmt.Printf("arr4 type: %T, value: %v\n", arr4, arr4)// 按数组多维度索引初始化arr5 := [3][3]int{0: {0: 10, 2: 20}, 2: {3, 3, 3}}fmt.Printf("arr5 type: %T, value: %v\n", arr5, arr5)
}
输出结果
arr: [[0 0] [0 0]]
arr1: [[1 2 3] [4 5 6]]
arr2 type: [2][2]int, value: [[0 0] [0 0]]
arr3 type: [2][3]int, value: [[1 2 3] [4 5 6]]
arr4 type: [3][3]int, value: [[1 1 1] [0 0 0] [3 3 3]]
arr5 type: [3][3]int, value: [[10 0 20] [0 0 0] [3 3 3]]
- 多维数组访问与修改
package mainimport "fmt"func main() {// 声明一个二维数组,并初始化var arr1 [2][3]int = [2][3]int{{1, 2, 3}, {4, 5, 6}}fmt.Println("arr1: ", arr1)// 访问维度fmt.Println("arr1[0]: ", arr1[0])// 访问某个元素fmt.Println("arr1[0][2]: ", arr1[0][2])// 修改维度arr1[0] = [3]int{10, 20, 30}fmt.Println("arr1: ", arr1)// 修改某个元素arr1[0][2] = 100fmt.Println("arr1: ", arr1)
}
输出结果
arr1: [[1 2 3] [4 5 6]]
arr1[0]: [1 2 3]
arr1[0][2]: 3
arr1: [[10 20 30] [4 5 6]]
arr1: [[10 20 100] [4 5 6]]
- 多维数组遍历
package mainimport "fmt"func main() {// 声明一个二维数组,并初始化var arr1 [2][3]int = [2][3]int{{1, 2, 3}, {4, 5, 6}}fmt.Println("arr1: ", arr1)// for循环遍历for i := 0; i < len(arr1); i++ {for j := 0; j < len(arr1[i]); j++ {fmt.Printf("arr1[%v][%v] = %v\t", i, j, arr1[i][j])}fmt.Println()}fmt.Println("=======================")// for-range循环遍历for i, row := range arr1 {for j, v := range row {fmt.Printf("arr1[%v][%v] = %v\t", i, j, v)}fmt.Println()}
}
输出结果
arr1: [[1 2 3] [4 5 6]]
arr1[0][0] = 1 arr1[0][1] = 2 arr1[0][2] = 3
arr1[1][0] = 4 arr1[1][1] = 5 arr1[1][2] = 6
=======================
arr1[0][0] = 1 arr1[0][1] = 2 arr1[0][2] = 3
arr1[1][0] = 4 arr1[1][1] = 5 arr1[1][2] = 6
起始
相关文章:
Golang基础-4
Go语言基础 介绍 基础 数组(array) 数组声明 元素访问与修改 数组遍历 关系运算 切片创建 多维数组 介绍 本文介绍Go语言中数组(array)操作(数组声明、元素访问与修改、数组遍历、关系运算、切片创建、多维数组)等相关知识。 基础 数组 数组是具有相同数据类型的…...

2024软件设计师备考讲义——UML(统一建模语言)
UML的概念 用例图的概念 包含 <<include>>扩展<<exted>>泛化 用例图(也可称用例建模)描述的是外部执行者(Actor)所理解的系统功能。用例图用于需求分析阶段,它的建立是系统开发者和用户反复…...
HTML——1.简介、基础、元素
一、简介 HTML(HyperText Markup Language)是一种用于创建网页的标记语言。它使用标记(tag)来描述网页的结构和内容。HTML被用于定义网页中的文本、图像、链接、多媒体以及其他元素的排列和呈现方式。 HTML文档是由一系列的HTML…...
Rust 标准库:std::env::args() 函数简介
std::env::args() 是 Rust 标准库中的一个函数,它属于 std::env 模块。这个函数用于获取并返回一个迭代器,该迭代器包含了程序运行时从命令行传入的所有参数。 当你运行一个 Rust 程序并从命令行传递参数时,例如: my_rust_progr…...

【Blockchain】GameFi | NFT
Blockchain GameFiGameFi顶级项目TheSandbox:Decentraland:Axie Infinity: NFTNFT是如何工作的同质化和非同质化区块链协议NFT铸币 GameFi GameFi是游戏和金融的组合,它涉及区块链游戏,对玩家提供经济激励,…...

【Docker】搭建安全可控的自定义通知推送服务 - Bark
【Docker】搭建安全可控的自定义通知推送服务 - Bark 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。 简介 Bark是一款为Apple设备用户设计的开源推送服务应用,它允许开发者、程序员以及一般用户将信息快速推送到他们自己的iPhone、iPad等设备上…...

国内IP代理软件电脑版:深入解析与应用指南
随着互联网技术的快速发展,网络活动日益丰富多样,IP代理软件也因其独特的功能和优势,成为许多电脑用户不可或缺的工具。在国内,由于网络环境的复杂性和特殊性,选择一款稳定、高效的IP代理软件电脑版尤为重要。虎观代理…...
面向对象设计之开闭原则
设计模式专栏: http://t.csdnimg.cn/4Mt4u 目录 1.引言 2.如何理解“对扩展开放、对修改关闭” 3.修改代码就意味着违反开闭原则吗 4.如何做到“对扩展开放、对修改关闭” 5.如何在项目中灵活应用开闭原则 6.总结 1.引言 开闭原则(Open Closed Principle&…...

【项目技术介绍篇】若依项目代码文件结构介绍
作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是࿰…...

实现DevOps需要什么?
实现DevOps需要什么? 硬性要求:工具上的准备 上文提到了工具链的打通,那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下: 代码管理(SCM):GitHub、GitLab、BitBucket、SubV…...
Linux小程序: 手写自己的shell
注意: 本文章只是为了理解shell内部的工作原理, 所以并没有完成shell的所有工作, 只是完成了shell里的一小部分工作 #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include &l…...

javaSwing租户管理系统
简介 欢迎阅读本篇博客,今天我将为大家介绍一个基于Java Swing开发的租户管理系统。该系统具有登录、注册、添加租户、查询租户信息、修改租户信息、删除租户、修改密码、退出登录等功能模块,旨在提供一个便捷的租户管理解决方案。 一、项目介绍 该租…...

cesium实现竖立的圆
cesium中的圆是平行于地面的,想实现竖起来的圆可以使用ellipsoid,设置其中一个轴的radii值为一个很小的值,比如0.00001,则这个轴上的宽度就会非常小,看起来就是一个圆面。 一、画圆ellipse,此处也把画圆的代…...

汽车电子行业知识:智能汽车电子架构
文章目录 3.智能汽车电子架构3.1.汽车电子概念及发展3.2.汽车电子架构类型3.2.1.博世汽车电子架构3.2.2.联合电子未来汽车电子架构3.2.3.安波福汽车电子架构3.2.4.丰田汽车电子架构3.2.5.华为汽车电子架构 3.智能汽车电子架构 3.1.汽车电子概念及发展 汽车电子是车体汽车电子…...

LeetCode146:LRU缓存
leetCode:146. LRU 缓存 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#x…...

【Unity音游制作】你玩过节奏大师吗?(Koreographe插件导入游戏主体)【一】
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:Uni…...

高效解决Ubuntu Server 18.04.1 LTS 64bit更新gdb8.1.1到gdb12.1
文章目录 问题解决步骤 问题 因为需要用到gdb一些指令,但是gdb8.x好像存在普遍的问题,实现不了某些指令,比方说set detach-on-fork on,升级版本也没有比较好的教程 经过我不断的试错,我终于升级成功了!&a…...

【公示】2023年度青岛市级科技企业孵化器拟认定名单
根据《青岛市科技企业孵化器管理办法》(青科规〔2023〕1号)(以下简称《管理办法》)、《关于开展2023年度市级科技企业孵化器认定申报工作的通知》,经申报受理、区市推荐、形式审查、专家评审及现场核查等程序ÿ…...

【软件安装】(十四)Ubuntu22.04安装Psensor硬件监视器
一个愿意伫立在巨人肩膀上的农民...... Ubuntu系统硬件运行查询输入指令太繁琐,终端展示不直观,因此这款具有可视化监控Ubuntu系统下当前电脑的硬件CPU(中央处理器)、GPU(显卡)和硬盘等温度等功能ÿ…...
数组合并小程序
题目: 输入有序数组a, b, 不使用排序算法,及额外数组,按大小顺序合并a, b数组,元素不重复; 思路: 1. 如果比插入的数组大,那么往后插入,如果继续有大的,就移动位置插入…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...