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. 如果比插入的数组大,那么往后插入,如果继续有大的,就移动位置插入…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...