Go语言24小时极速学习教程(二)复合数据(集合)操作

server/2024/11/17 23:12:29/

在Go语言中,复合数据类型是由基本数据类型组合而成的更复杂的数据结构。常见的复合数据类型包括数组(Array)、切片(Slice)、映射(Map)、结构体(Struct)和接口(Interface)。以下是这些复合数据类型的常见用法总结:

1. 数组(Array)

数组是固定长度的序列,包含相同类型的元素。

声明和初始化
var arr [5]int // 声明一个包含5个整数的数组
arr := [5]int{1, 2, 3, 4, 5} // 声明并初始化
访问和修改元素
arr[0] = 10 // 修改第一个元素
fmt.Println(arr[0]) // 输出第一个元素
遍历数组
for i := 0; i < len(arr); i++ {fmt.Println(arr[i])
}

2. 切片(Slice)

切片是动态数组,可以动态增长和缩减,类似于Java的ArrayList。

声明和初始化
var slice []int // 声明一个空切片
slice := []int{1, 2, 3, 4, 5} // 声明并初始化
slice := make([]int, 5) // 使用make函数创建切片
访问和修改元素
slice[0] = 10 // 修改第一个元素
fmt.Println(slice[0]) // 输出第一个元素
追加元素
slice = append(slice, 6) // 追加元素
遍历切片
for i, v := range slice {fmt.Printf("下标: %d, 值: %d\n", i, v)
}

3. 映射(Map)

映射是一种无序的键值对集合。类似于Java的HashMap。

声明和初始化
var m map[string]int // 声明一个空映射
m := make(map[string]int) // 使用make函数创建映射
m := map[string]int{"a": 1, "b": 2} // 声明并初始化
访问和修改元素
m["a"] = 10 // 修改键为"a"的值
fmt.Println(m["a"]) // 输出键为"a"的值
删除元素
delete(m, "a") // 删除键为"a"的元素
遍历映射
for k, v := range m {fmt.Printf("键: %s, 值: %d\n", k, v)
}

4. 结构体(Struct)

结构体是一种聚合数据类型,可以包含多个不同类型的字段。

声明和初始化
type Person struct {Name stringAge  int
}var p Person // 声明一个结构体变量(注意,我们这里称之为变量,而不是对象)
p := Person{Name: "张三", Age: 30} // 声明并初始化
访问和修改字段
p.Name = "李四" // 修改Name字段
fmt.Println(p.Name) // 输出Name字段
方法
func (p Person) SayHello() {fmt.Printf("你好,我是 %s\n", p.Name)
}p.SayHello() // 调用方法

5. 接口(Interface)

接口定义了一组方法的集合,任何实现了这些方法的类型都实现了该接口。

声明接口

上一篇讲过,不再赘述

type Speaker interface {Speak() string
}
实现接口

上一篇讲过,不再赘述

type Dog struct {Name string
}func (d Dog) Speak() string {return d.Name + ":旺!"
}
使用接口

这里的机制和Java和C#差不多,即接口变量可以承载实现了它的对象,也称之为上转型机制。

func main() {var s Speaker = Dog{Name: "旺财"}fmt.Println(s.Speak()) // 输出 "旺财:旺!"
}

http://www.ppmy.cn/server/142746.html

相关文章

腾讯云产品推荐----域名的使用

一、域名的定义 域名&#xff08;英语&#xff1a;Domain Name&#xff09;&#xff0c;又称网域&#xff0c;是由一串用点分隔的名字组成的互联网上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时对计算机的定位标识&#xff08;有时也指地理位置&#xff09;。由…

【算法】二分

1. 找到有序区间中 x 最左边的数字的位置 static int getL(int a[], int l, int r, int x) {while (l < r) {int mid l r >> 1;if (x < a[mid]) {r mid;} else {l mid 1;}}if (a[l] ! x) return -1;return l;} 2. 找到有序区间中 x 最右边的数字的位置 stati…

如何使用Django写个接口,然后postman中调用

好的&#xff0c;下面是一个详细的步骤&#xff0c;展示如何使用 Django 创建一个简单的 API 接口&#xff0c;并在 Postman 中进行调用。 1. 创建 Django 项目和应用 首先&#xff0c;确保你已经安装了 Django。如果还没有安装&#xff0c;可以使用以下命令安装&#xff1a;…

【项目日记】仿mudou的高并发服务器 --- 整体框架搭建 ,实现时间轮模块

命运的局限尽可永在&#xff0c; 不屈的挑战却不可须臾或缺。 --- 史铁生 --- 项目地址在这里: https://gitee.com/penggli_2_0/TcpServer 仿mudou的高并发服务器 1 项目介绍2 模块组成3 实现时间轮模块3.1 设计思想3.2 定时任务类3.3 TimeWheel时间轮类 1 项目介绍 这是一…

智谱AI清影升级:引领AI视频进入音效新时代

前几天智谱推出了新清影,该版本支持4k、60帧超高清画质、任意尺寸&#xff0c;并且自带音效的10秒视频,让ai生视频告别了"哑巴时代"。 智谱AI视频腾空出世&#xff0c;可灵遭遇强劲挑战&#xff01;究竟谁是行业翘楚&#xff1f;(附测评案例)之前智谱出世那时体验了一…

深度学习transformer

Transformer可是深度学习领域的一个大热门呢&#xff01;它是一个基于自注意力的序列到序列模型&#xff0c;最初由Vaswani等人在2017年提出&#xff0c;主要用于解决自然语言处理&#xff08;NLP&#xff09;领域的任务&#xff0c;比如机器翻译、文本生成这些。它厉害的地方在…

12、Linux系统的网络基本设置

查看网络接口信息ifconfig ip addr/ip a #简单查看网络接口信息 ifconfig #表示只显示当前活跃的设备接口信息 ifconfig -a #查看当前主机所有的&#xff08;all&#xff09;网络设备&#xff0c;包括未运行的设备。 如我们查看本机网卡ens33的…

ssm111基于MVC的舞蹈网站的设计与实现+vue(论文+源码)_kaic

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;舞蹈网站当然也不能排除在外。舞蹈网站是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采用Java技…