当前位置: 首页 > news >正文

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

详细介绍: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.rkmt.cn/news/28483.html

相关文章:

  • npm install 时包库找不到报错解决 - 实践
  • MATLAB 仿真无线传感器网络(WSN)三大经典场景
  • 我最常用的快捷键
  • Semgrep代码审计工具的使用
  • WPF多语言实现
  • 16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造
  • unity设置外置文件,运行读取文件获取地址
  • Microsoft Agent Framework/C#:了解Workflows的几种不同模式
  • CodeForces-374D Inna and Sequence
  • 字符串过长导致编译报错的问题及解决办法 - 详解
  • 厨房电秤方案:介绍一款电子秤芯片sic8632
  • CF981F Round Marriage
  • macOS直接使用pip安装报错
  • 《借力JBoltAI框架,Java技术开发公司开启高效开发新范式》
  • Wireshark抓包教程:JSON和HTTPS抓取
  • SMARTFORMS去掉数值后面的小数点
  • 数字征程,逐级而上;生态协同,智绘新篇—— 艾拓琪威灏 与 哲讯顺维 数字化战略合作签署暨CRMMES项目启动会隆重举行
  • 2025 年唐山油漆生产厂家最新推荐榜单:精选优质企业,解析专业品牌选购指南唐山油漆批发/唐山油漆生产公司推荐
  • 做题笔记21
  • 权威调研榜单:重庆旧房加层改造公司TOP3榜单好评深度解析
  • 2025 年 MVR 蒸发器源头厂家最新推荐排行榜:聚焦食品医药化工环保领域优质设备,助力企业精准选型
  • Tailwind CSS 使用入门
  • 实用指南:Calico 网络插件在 K8s 集群的作用
  • godot + Avalonia 渲染第三方UI
  • 2025-10-23 cocos安装
  • 用EasyPlayer播国标GB28181算法算力平台EasyGBS视频流,居然比点外卖还简单
  • 测试美化效果
  • idea错误解决记录
  • 2025 年连接器厂家最新推荐榜单:覆盖多领域优质产品,为企业选购提供权威参考的国内制造商精选汽车/高速/板载/航空连接器公司推荐
  • 2025年护栏厂家权威推荐榜单:不锈钢栏杆、桥梁防撞护栏、河道景观护栏等全品类生产供应商精选