详细介绍:go语言学习记录9.23

news/2025/10/23 16:52:29/文章来源:https://www.cnblogs.com/ljbguanli/p/19161077

详细介绍:go语言学习记录9.23

在Go中,数组是一个长度固定的,包含了相同类型元素的数据结构;

// 声明一个长度为3的,元素类型为int的数组
var arr[3]int
arr[0] = 10
arr[1] = 20
arr[2] = 30
fmt.Println(arr) //输出[10,20,30]
// 声明并初始化
arr2 := [3] string{"Vue", "React", "Next"}
fmt.Println(arr2) // 输出[Vue React Next]

在Go中,数组的长度是其类型的一部分,这意味着[3]int和[4]int是两种完全不同的类型;

Go的数组是刚性的,一旦声明,其大小永远无法改变,不能像js那样随意的push和pop;

所以在Go中常用切片来处理动态长度的列表。

如下就是初始化一个切片:

// 声明一个 string 类型的切片 (注意 [] 中没有长度)
var mySkills []string
// 使用字面量初始化一个切片
frontendFrameworks := []string{"Vue", "React", "Next.js"}
fmt.Println(frontendFrameworks) // 输出: [Vue React Next.js]

切片的内部结构:
一个slice变量其实是一个小小的描述符结构体,它包含三个信息:
1.指针:指向底层数组中,该切片所代表的第一个元素;

2.长度:切片中包含的元素个数,通过len()函数获取;

3.容量:从切片的起始元素开始,到底层数组末尾的元素总数,通过cap()函数获取;

在Go中,len()函数就完全等同于js中的.length属性;cap()可以理解为这个切片在不重新分配新内存的情况下,最多还能增长到多大;
官方有个典型的例子代码:

// 底层是一个有5个元素的数组
underlyingArray := [5]string{"JS", "TS", "Go", "Java", "Python"}
// 基于上面的数组,创建一个切片,视图范围是从索引2到索引4 (不包含4)
// a[low:high] -> low inclusive, high exclusive
myGoSlice := underlyingArray[2:4]
fmt.Printf("切片内容: %v\n", myGoSlice) // 输出: [Go Java]
fmt.Printf("长度 (len): %d\n", len(myGoSlice)) // 输出: 2 (因为它包含 "Go", "Java" 两个元素)
fmt.Printf("容量 (cap): %d\n", cap(myGoSlice)) // 输出: 3 (从"Go"开始,到底层数组结尾,有 "Go", "Java", "Python" 三个元素)

操作切片也有一个api叫做append,这是操作切片最核心的api;
append在功能上类似于js中的.push();但是在js中,.push是原地修改数组,而Go的append可能回创建一个全新的、更大的底层数组(当超出容量时),然后把旧元素复制过去,再添加新元素,最后返回一个指向新内存的切片;所以必须总是把append的结果重新赋值给原来的切片变量;常用写法如下:

tasks := []string{"Learn Go Syntax"}
// append 会返回一个新的切片
tasks = append(tasks, "Learn Concurrency")
tasks = append(tasks, "Build a Project")
fmt.Println(tasks) // 输出: [Learn Go Syntax Learn Concurrency Build a Project]

本篇就先到这里了,后续补充切片共享底层数组的情况

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

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

相关文章

npm install 时包库找不到报错解决 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MATLAB 仿真无线传感器网络(WSN)三大经典场景

一、统一参数区(建议先调这里) %% 0. 公共参数 clear; clc; close all; rng(2025) % 可重复 field = [0 100; 0 100]; % 100 m 100 m nNode = 200; % 节点数 R = 1…

P13382 解题报告

前言 连续段 DP 板子,问题在于没有学连续段 DP 并理解其本质 这个题目还可以当成每一次插入一些字母是一个很好的 trick 同时记得联考没有好东西,不会就跳了看后面的暴力拿满 经常出现 T3,4 没有时间做的情况也可以…

免费搜索下载ICON图标的网站

之前有个网站,后来关闭了。刚刚找一个,貌似还可以。 https://icon-icons.com/zh/

6ES7592-1BM00-0XA0 32路dq接线端子

6ES7592-1BM00-0XA0 32路dq接线端子短答:不能。6ES7592-1BM00-0XA0 不是 32 路 DQ(Digital Output)模块,它只是 S7-1500 系列用的 前端接线端子 / front connector(40-pole),用来把线接到模块/紧凑型 CPU 的前端…

轻松掌握:用 Python 的 pdfminer 将 PDF 内容保存为 Word 文档 - 详解

轻松掌握:用 Python 的 pdfminer 将 PDF 内容保存为 Word 文档 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

我最常用的快捷键

显示桌面:Win + D 锁屏:Win + L 打印:Ctrl + P 搜索:Win + S 上移至顶部:Ctrl + Home 下移至底部:Ctrol + End 另外比较通常的快捷键: 打开文件:Ctrl + O 保存文件:Ctrl + S 复制:Ctrl + C 粘贴:Ctrl + V 新…

Semgrep代码审计工具的使用

Semgrep代码审计工具的使用 1 Semgrep简介 Semgrep(Semantic Grep)是一款开源的轻量级静态代码分析工具(SAST),由安全公司r2c开发和维护。它采用模式匹配的方式在代码中搜索特定模式,从而识别安全漏洞、代码质量…

WPF多语言实现

参考:https://www.cnblogs.com/chenshibao/p/18937359 开发工具:Visual Studio2022 使用资源字典实现。首先创建在项目下新建多语言目录,新建语言资源en-US.xaml内容 <ResourceDictionaryxmlns="http://sch…

16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造

为了优化大规模应用场景下的性能和成本压力,我们针对 Embedding 服务的推理瓶颈进行了系统性优化。通过深入分析、方案选择与定制优化,最终实现了吞吐量提升 16 倍,同时显著降低了单位请求的资源成本。作者:郑前祎…

unity设置外置文件,运行读取文件获取地址

直接放代码吧public static string url= "http://192.168.1.43:9100";//public static string url = "http://43.137.7.254:10028/server";private void Awake(){StartCoroutine(GetPath());}IEnu…

Microsoft Agent Framework/C#:了解Workflows的几种不同模式

前言 最近有空的时候在学习Microsoft Agent Framework,在这个框架中目前Workflows分为了Sequential、Concurrent、Handoffs以及Groupchat四种模式,今天让我们来了解一下这四种不同的模式。 首先需要以下两个包:Sequ…

CodeForces-374D Inna and Sequence

tag: *2000;线段树,二分CodeForces-374D Inna and Sequence tag: *2000;线段树有一个比特串 \(w\),初始为空。给定 \(a_1,\cdots,a_m\),满足 \(1\le a_1<\dots<a_m\)。有三种操作:操作 \(-1\):令 \(k\) 为…

字符串过长导致编译报错的问题及解决办法 - 详解

字符串过长导致编译报错的问题及解决办法 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

厨房电秤方案:介绍一款电子秤芯片sic8632

SIC8632是一款应用于厨房秤的高性能单片机芯片,由国产厂商西城微科推出。以下是对它的详细介绍:基本特性架构与存储:8位RISC架构的高性能单片机,内置4K16位一次性可编程(OTP)ROM和256字节数据存储器(SRAM),只…

CodeForces-1183F Topforces Strikes Back

tag: *2100;思维题,贪心*CodeForces-1183F Topforces Strikes Back tag: *2100;思维题,贪心给定长度为 \(n\) 的序列 \(a\),从中选出 最多 三个数,满足其中任两个之间没有倍数关系。求这三个数之和的最大值。 \(…

Excel 实现下拉多选功能

Excel 实现下拉多选功能开启宏 创建 sheet 级别的 vb 脚本 将下面代码写入Private Sub Worksheet_Change(ByVal Target As Range)Dim watchRange As RangeDim newVal As String, oldVal As StringDim items() As Strin…

CF981F Round Marriage

首先发现二分答案,然后问题就变成了一个二分图是否有完美匹配的问题,我们自然是希望用 Hall 定理来解决这一问题。 Hall 定理原本的描述还是太吃操作了,考虑猜结论,就是 \(a\) 排序后每个子区间对于其来说都合法那…

macOS直接使用pip安装报错

# 1. 创建虚拟环境 python3 -m venv venv# 2. 激活虚拟环境 source venv/bin/activate # macOS / Linux# 3. 安装你需要的包,比如 requests pip install requests

2025 年最新螺旋地桩厂家推荐排行榜:聚焦光伏大棚等场景,甄选优质实力企业桩尖/大棚/组合/地螺丝螺旋地桩厂家推荐

随着基础设施建设、光伏电站搭建及各类建筑工程的快速推进,螺旋地桩作为关键基础支撑部件,其质量与性能直接决定工程稳定性和使用寿命。但当前市场乱象丛生,部分品牌产品规格单一,难以适配山地、坡地等复杂地形;部…