Golang基础-4

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中数组(array)操作(数组声明、元素访问与修改、数组遍历、关系运算、切片创建、多维数组)等相关知识。

基础

数组
  • 数组是具有相同数据类型的数据元素组成的一组长度固定的序列,数组的长度必须是非负整数的常量,长度也是类型的一部分。
  • 数组声明后,其数据类型与元素数量固定不可变。
数组声明
package main

import "fmt"

func main() {
	// 声明数组
	var arr0 [5]float32
	fmt.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 main

import "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] = 100
	arr[1] = 200
	arr[4] = 300
	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])
}

输出结果
[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 main

import "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 main

import "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 main

import "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 main

import "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 main

import "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] = 100
	fmt.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 main

import "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

起始

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑突然死机怎么办?

死机是电脑常见的故障问题&#xff0c;尤其是对于老式电脑来说&#xff0c;一言不合电脑画面就静止了&#xff0c;最后只能强制关机重启。那么你一定想知道是什么原因造成的吧&#xff0c;一般散热不良最容易让电脑死机&#xff0c;还有系统故障&#xff0c;比如不小心误删了系…

【实现报告】学生信息管理系统(顺序表)

目录 实验一 线性表的基本操作 一、实验目的 二、实验内容 三、实验提示 四、实验要求 五、实验代码如下&#xff1a; &#xff08;一&#xff09;顺序表的构建及初始化 &#xff08;二&#xff09;检查顺序表是否需要扩容 &#xff08;三&#xff09;根据指定学生个…

企业网站建设的方法的相关问题的解决办法的问题

现在市场上比较大的公司都建立了自己的企业网站&#xff0c;比如华为、小米等&#xff0c;在他们的企业网站中&#xff0c;可以充分展示自己产品的优势&#xff0c;介绍公司的优质服务。 这都是让顾客改变购买想法的重要因素。 现在互联网发达了&#xff0c;很多人在购买产品的…

详细分析axios.js:72 Uncaught (in promise) Error: 未知错误 的解决方法(图文)

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 调试接口的时候,打开一个网页,在终端出现如下错误: axios.js:72 Uncaught (in promise) Error: 未知错误at __webpack_exports__.default (axios.js:72:1)截图如下所示: 2. 原理分析 点击浏览器的Bug出错: // 如果…

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)

初级&#xff1a;用好手上的锤子 1 【感性】认识 C 系编程语言开发调试过程 1.1 视频教程点到为止 1.2 炫技视频看看就行 1.3 编程游戏不玩也罢 有些游戏的主题任务就是编程&#xff0c;游戏和实际应用环境有一定差异&#xff08;工具、操作流程&#xff09;&#xff0c;在…

进程知识点

引用的文章&#xff1a;操作系统——进程通信&#xff08;IPC&#xff09;_系统ipc-CSDN博客 面试汇总(五)&#xff1a;操作系统常见面试总结(一)&#xff1a;进程与线程的相关知识点 - 知乎 (zhihu.com) 二、进程的定义、组成、组成方式及特征_进程的组成部分必须包含-CSDN博…

2024年北京事业单位报名照片要求,注意格式

2024年北京事业单位报名照片要求&#xff0c;注意格式

【C语言】预处理常见知识详解(宏详解)

文章目录 1、预定义符号2、define2.1 define 定义常量2.2 define 定义宏 3、#和##3.1 **#**3.2 **##** 4、条件编译&#xff08;开关&#xff09; 1、预定义符号 在C语言中内置了一些预定义符号&#xff0c;可以直接使用&#xff0c;这些符号实在预处理期间处理的&#xff0c;…

工控安全双评合规:等保测评与商用密码共铸新篇章

01.双评合规概述 2017年《中华人民共和国网络安全法》开始正式施行&#xff0c;网络安全等级测评工作也在全国范围内按照相关法律法规和技术标准要求全面落实实施。2020年1月《中华人民共和国密码法》开始正式施行&#xff0c;商用密码应用安全性评估也在有序推广和逐步推进。…

信息安全之网络安全防护

先来看看计算机网络通信面临的威胁&#xff1a; 截获——从网络上窃听他人的通信内容中断——有意中断他人在网络上的通信篡改——故意篡改网络上传送的报文伪造——伪造信息在网络上传送 截获信息的攻击称为被动攻击&#xff0c;而更改信息和拒绝用户使用资源的攻击称为主动…

深入了解高压电阻器的世界,探索其操作、类型和在各种高压应用中的关键作用

高压电阻器是高压条件下的专用元件&#xff0c;对于管理电压和散热至关重要 它们的工作原理是欧姆定律 类型包括线绕电阻、碳复合电阻、金属氧化物膜电阻、厚膜电阻和薄膜电阻这些电阻器在电力系统、医疗设备、汽车电子和电信设备中是必不可少的。 额定电压从600V到48KV 80p…

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表&#xff0c;可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

基础算法-去重字符串,辗转相除法,非递归前序遍历二叉树题型分析

目录 不同子串 辗转相除法-求最大公约数 二叉树非递归前序遍历 不同子串 从a开始&#xff0c;截取 a aa aaa aaab 从第二个下标开始a aa aab 从第三个 a ab 从第四个 b 使用set的唯一性&#xff0c;然后暴力遍历来去去重&#xff0c;从第一个下标开始截取aaab a aa aaa aaab…

代码随想录算法训练营第36天|738.单调递增的数字|968.监控二叉树|总结

代码随想录算法训练营第36天|738.单调递增的数字|968.监控二叉树|总结 738.单调递增的数字 https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html class Solution { public:int monotoneIncreasingDigits(int n) {string s…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

【分类评估指标,精确率,召回率,】from sklearn.metrics import classification_report

from&#xff1a; https://zhuanlan.zhihu.com/p/368196647 多分类 from sklearn.metrics import classification_report y_true [0, 1, 2, 2, 2] y_pred [0, 0, 2, 2, 1] target_names [class 0, class 1, class 2] # print(classification_report(y_true, y_pred, targe…

学浪m3u8视频解密

学浪视频在网页上并不是mp4&#xff0c;而是以m3u8进行传输&#xff0c;使用m3u8可以有效解决服务器的压力&#xff0c;而且不仅仅是m3u8&#xff0c;还加密了key&#xff0c;需要逆向key算法得到真实key 下面是学浪m3u8视频解密的工具&#xff0c;全程自动化&#xff0c;不需…

MobileSAM 项目排坑

MobileSAM 项目排坑 任务过程记录创建环境交互式测试notebookV2测试 任务 把MobileSAM这个项目跑通&#xff0c;明天就可以集中学习SAM、MobileSAM、EfficientSAM和Segformer的论文和代码了。 过程记录 创建环境 老样子&#xff1a; git clone https://github.com/Chaonin…

《系统架构设计师教程(第2版)》第8章-系统质量属性与架构评估-01-软件系统质量属性

文章目录 1. 质量属性概念1.1 软件系统质量1.2 软件质量属性概述1.3 各生命周期的质量属性1.2.1 开发期质量属性1.2.2 运行期质量属性 2. 面向架构评估的质量属性2.1 性能(Performance)2.2 可靠性 (Reliability)2.2.1 容错2.2.2 健壮性 2.3 可用性 (Availability)2.4 安全性 (S…

macOS Sonoma如何查看隐藏文件

在使用Git进行项目版本控制时&#xff0c;我们可能会遇到一些隐藏文件&#xff0c;比如.gitkeep文件。它通常出现在Git项目的子目录中&#xff0c;主要作用是确保空目录也可以被跟踪。 终端命令 在尝试查看.gitkeep文件时&#xff0c;使用Terminal命令来显示隐藏文件 default…
最新文章