第3章:Go语言复合数据类型

第3章:Go语言复合数据类型

1. 数组

1.1 数组声明和初始化

// 方式1:声明固定长度数组
var numbers [5]int  // 声明一个包含5个整数的数组,默认零值// 方式2:初始化数组
arr1 := [5]int{1, 2, 3, 4, 5}  // 完全初始化// 方式3:部分初始化
arr2 := [5]int{1, 2}  // 前两个元素为1,2,其余为0// 方式4:自动推断数组长度
arr3 := [...]int{1, 2, 3, 4, 5}  // 长度自动计算为5// 方式5:指定索引初始化
arr4 := [5]int{1: 10, 3: 30}  // 索引1和3位置赋值,其他为0

1.2 数组遍历

// 方式1:传统for循环
numbers := [5]int{10, 20, 30, 40, 50}
for i := 0; i < len(numbers); i++ {fmt.Printf("索引 %d: %d\n", i, numbers[i])
}// 方式2:range遍历
for index, value := range numbers {fmt.Printf("索引 %d: %d\n", index, value)
}// 只需要值,忽略索引
for _, value := range numbers {fmt.Println(value)
}

2. 切片(Slice)

2.1 切片的创建和使用

// 方式1:从数组创建切片
arr := [5]int{1, 2, 3, 4, 5}
slice1 := arr[1:4]  // 包含索引1到3的元素// 方式2:直接创建切片
slice2 := []int{1, 2, 3, 4, 5}// 方式3:使用make创建
slice3 := make([]int, 5)       // 长度为5的切片
slice4 := make([]int, 5, 10)   // 长度5,容量10的切片

2.2 切片操作

// 添加元素
slice := []int{1, 2, 3}
slice = append(slice, 4)        // 添加单个元素
slice = append(slice, 5, 6, 7)  // 添加多个元素// 复制切片
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)// 删除元素
slice = append(slice[:2], slice[3:]...)  // 删除索引2的元素// 切片截取
subSlice := slice[1:4]  // 获取子切片

2.3 动态扩展

// 自动扩容机制
slice := []int{}
for i := 0; i < 20; i++ {slice = append(slice, i)fmt.Printf("长度:%d, 容量:%d\n", len(slice), cap(slice))
}

3. Map

3.1 Map的声明和初始化

// 方式1:使用make创建
ages := make(map[string]int)
ages["Alice"] = 25
ages["Bob"] = 30// 方式2:直接初始化
scores := map[string]int{"Math":    90,"English": 85,
}// 检查键是否存在
value, exists := scores["Math"]
if exists {fmt.Println("找到值:", value)
}

3.2 Map增删改查

// 添加和修改
users := map[string]string{}
users["admin"] = "password"  // 添加
users["admin"] = "newpass"   // 修改// 删除
delete(users, "admin")// 遍历
for key, value := range users {fmt.Printf("%s: %s\n", key, value)
}

4. 结构体

4.1 结构体定义

// 基本结构体定义
type Person struct {Name stringAge  int
}// 创建结构体实例
alice := Person{Name: "Alice",Age:  25,
}// 匿名结构体
student := struct {Name stringAge  int
}{Name: "Bob",Age:  20,
}

4.2 方法和接收者

// 值接收者方法
func (p Person) Introduce() string {return fmt.Sprintf("我是%s,今年%d岁", p.Name, p.Age)
}// 指针接收者方法
func (p *Person) Birthday() {p.Age++
}// 使用方法
alice := Person{Name: "Alice", Age: 25}
fmt.Println(alice.Introduce())
alice.Birthday()

4.3 结构体嵌套

// 匿名嵌套
type Employee struct {Person  // 匿名嵌套Company string
}// 有名字的嵌套
type Company struct {employee PersonAddress  string
}// 使用
emp := Employee{Person:  Person{Name: "Charlie", Age: 30},Company: "Google",
}
fmt.Println(emp.Name)  // 可以直接访问嵌套结构体的字段

4.4 结构体标签(tag)

// 结构体标签
type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}

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

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

相关文章

uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端

采用 uniapp-vue3 实现, 是一款带有丝滑动画效果的单选框组件&#xff0c;提供点状、条状的动画过渡效果&#xff0c;支持多项自定义配置&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&…

深度学习GPU服务器推荐:打造高效运算平台

文章来源于百家号&#xff1a;GPU服务器厂家 在深度学习和人工智能领域&#xff0c;一个高性能的GPU服务器是研究和开发工作的关键。今天&#xff0c;我们将为大家推荐一款基于详细硬件配置表的深度学习GPU服务器&#xff0c;它专为高效运算和数据处理而设计。 一、机箱设计 …

2025第1周 | JavaScript中的正则表达式

目录 1. 正则表达式是个什么东东&#xff1f;1.1 怎么定义正则1.2 对象字面量方式1.3 类创建方式 2. 怎么使用2.1 实例方法2.1.1 exec方法2.1.2 test方法 2.2 字符串中的方法2.2.1 match/matchAll2.2.2 replace/replaceAll2.2.3 split2.2.4 search 3. 规则3.1 修饰符3.2 字符类…

大模型LLM-Prompt-OPTIMAL

1 OPTIMAL OPTIMAL 具体每项内容解释如下&#xff1a; Objective Clarity&#xff08;目标清晰&#xff09;&#xff1a;明确定义任务的最终目标和预期成果。 Purpose Definition&#xff08;目的定义&#xff09;&#xff1a;阐述任务的目的和它的重要性。 Information Gat…

78、使用爱芯派2_AX630C开发板 3.2T高有效算力 低功耗 支持AI-ISP真黑光实验

基本思想:使用爱心元智最新的版本开发板进行实验 AX630C、AX620Q 都是 620E 这一代 一、参考这个官方教程,先把代码在本地交叉编译完成 https://github.com/AXERA-TECH/ax620e_bsp_sdk 然后在拷贝到620c设备上 root@ax630c:~/ax620e_bsp_sdk/msp/out/arm64_glibc/bin# ./…

C语言 扫雷程序设计

目录 1.main函数 2.菜单打印menu函数 3.游戏game函数 4.宏定义 5.界面初始化 6.打印界面 7.设置雷 8.统计排查坐标周围雷的个数 9.排查雷 10.总代码 test.c代码 game.h代码 game.c代码 结语&#xff1a; 一个简单的扫雷游戏&#xff0c;通过宏定义可以修改行列的…

《高速公路警察模拟器》

一个引人入胜的警察故事在等着你&#xff0c;你可以选择扮演男警官或女警官。公路警察模拟器》拥有休闲和模拟两种游戏模式&#xff0c;将两个世界的精华结合在一起&#xff1a;在身临其境的虚拟环境中自由驾驶和行走&#xff0c;在故事驱动的游戏中解决各种令人兴奋的案件。探…

EasyGBS小知识:如何确保摄像机的网络连接稳定?

在当今数字化时代&#xff0c;视频监控系统已成为保障安全和提高效率的重要工具。然而&#xff0c;摄像机的网络连接稳定性直接关系到监控系统的可靠性和有效性。为了确保视频监控系统能够持续稳定地运行&#xff0c;我们需要从硬件、网络设置、软件与监控以及安装与维护等多个…

微服务-Eureka

Eureka的作用 使用RestTemplate完成远程调用需要被调用者的ip和端口&#xff0c;从而能够发起http请求&#xff0c;但是如果有很多个实例也更加不能有效的处理&#xff0c;而且我们又该如何知道这些实例是否健康呢。所以就有了很多的注册中心比如Eureka、Nacos等等。 服务注…

LabVIEW软件侵权分析与应对

问&#xff1a;如果涉及到LabVIEW软件的仿制或模仿&#xff0c;特别是在功能、界面等方面&#xff0c;如何判断是否构成侵权&#xff1f;该如何应对&#xff1f; 答&#xff1a;LabVIEW软件的侵权问题&#xff0c;尤其是在涉及到仿制或模仿其功能、界面、设计等方面&#xff0…

MATLAB仿真:基于GS算法的经大气湍流畸变涡旋光束波前校正仿真

GS算法流程 GS&#xff08;Gerchberg-Saxton&#xff09;相位恢复算法是一种基于傅里叶变换的最速下降算法&#xff0c;可以通过输出平面和输入平面上光束的光强分布计算出光束的相位分布。图1是基于GS算法的涡旋光束畸变波前校正系统框图&#xff0c;在该框图中&#xff0c;已…

数树数(中等难度)

题目&#xff1a; 解题代码&#xff1a; n,qmap(int,input().split())#分别输入层数和路径数量 for i in range(q):sinput()#输入“L”或“R”x1for j in s:if j "L":xx*2-1 #&#xff01;&#xff01;&#xff01;规律else:xx*2print(x)

高效内存管理与调试技巧:深入解析 AddressSanitizer

在现代 C开发中&#xff0c;内存管理是一个至关重要但也容易出错的领域。即使使用了智能指针和其他高效工具&#xff0c;复杂的项目仍可能出现内存泄漏、非法访问等问题。为了解决这些问题&#xff0c;Google 开发了一个强大的工具——AddressSanitizer (ASan)。本文将详细介绍…

Vue3 内置组件之Teleport

文章目录 Vue3 内置组件之Teleport概述用法 Vue3 内置组件之Teleport 概述 Teleport 中文翻译为“瞬间移动”&#xff0c;顾名思义&#xff0c;在Vue3 中 <Teleport> 组件可以将组件中内容移动到指定的目标元素上。 用法 <script setup> import {ref} from &qu…

【我的 PWN 学习手札】IO_FILE 之 FSOP

FSOP&#xff1a;File Stream Oriented Programming 通过劫持 _IO_list_all 指向伪造的 _IO_FILE_plus&#xff0c;进而调用fake IO_FILE 结构体对象中被伪造的vtable指向的恶意函数。 目录 前言 一、glibc-exit函数浅析 二、FSOP 三、Largebin attack FSOP &#xff08;…

函数指针的用法

函數指標一些相關的用法和注意事項。以下將詳細說明&#xff1a; 1. 基本寫法: 這是最常見且明確的寫法&#xff0c;尤其在處理重載函數時非常有用。 void (GirlFriend::*girl2)(QString) &GirlFriend::hungry;void: 指標所指向的函數的回傳型別。(GirlFriend::*): 表示…

DDcGAN_多分辨率图像融合的双鉴别条件生成对抗网络_y译文马佳义

摘要&#xff1a; 在本文中&#xff0c;我们提出了一种新的端到端模型&#xff0c;称为双鉴别条件生成对抗网络&#xff08;DDcGAN&#xff09;&#xff0c;用于融合不同分辨率的红外和可见光图像。我们的方法建立了一个生成器和两个鉴别器之间的对抗博弈。生成器的目的是基于特…

springboot配置线程池

直接上代码 配置 定义一个配置类 创建一个springboot能扫描到的地方创建一个线程池配置类 配置信息 package com.example.demonew.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import or…

【君正T31开发记录】12.编译工具相关总结及介绍

移植交叉工具包的时候&#xff0c;发现这是很多工具的集合包&#xff1b;以及写makefile的时候&#xff0c;也需要了解下这些工具的作用及用法&#xff0c;这里总结记录一下常见的工具及相关用法。 g C编译器&#xff0c;用于编译C源代码文件&#xff0c;这个很常见&#xff0…

如何让面向应急管理的多智能体具备自主决策能力

现代应急管理面对的是复杂、多变、跨部门的灾害与事故场景——从自然灾害&#xff08;洪水、地震、台风、火灾&#xff09;到公共安全事件&#xff08;疫情、重大安全事故&#xff09;&#xff0c;都需要在极短时间内进行快速响应和全局协同。传统的集中式指挥模式虽然有效&…