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

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

在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 string
    Age  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.kler.cn/a/400866.html

相关文章:

  • Web3浪潮下的区块链应用:从理论到实践的全面解析
  • CVE-2024-2961漏洞的简单学习
  • 集群聊天服务器(9)一对一聊天功能
  • 游戏引擎学习第16天
  • Relaxcert SSL证书申请与自动续签之IIS
  • 《基于 PySpark 的电影推荐系统分析及问题解决》
  • 客运购票售票小程序校园巴士预约售票小程序开发方案php+uniapp
  • uni-app如何向Vue那样操作dom节点
  • Chapter 2 - 15. Understanding Congestion in Fibre Channel Fabrics
  • 2024雪浪小镇·京东科技上海产业对接会
  • 预训练 BERT 使用 Hugging Face 和 PyTorch 在 AMD GPU 上
  • Spring Boot汽车资讯:科技与速度的交响
  • Matlab信号处理:频域分析中的功率谱
  • 第三十二天|动态规划| 理论基础,509. 斐波那契数,70. 爬楼梯 ,746. 使用最小花费爬楼梯
  • 汽车资讯新引擎:Spring Boot技术领航
  • springboot 获取spring上下文
  • ### 哋它亢在5G基站中的应用:新兴技术与未来通信的融合
  • 在vue中,在使用antdesign的table组件时,实现可以直接编辑修改某个单元格的值
  • spring boot 请求
  • CSS 样式的优先级?
  • Matlab信号处理:频域分析中的包络谱
  • 系统架构设计师:系统架构设计基础知识
  • 基于KNN的旋转机械故障诊断Matlab实现
  • 使用Java爬虫技术高效获取电商平台商品历史价格信息
  • PostgreSQL技术内幕18:物理备份工具pg_basebackup
  • 静态路由综合实验