当前位置: 首页> 文旅> 酒店 > 色盲测试图_学前端好还是后端好_廊坊seo外包公司费用_优化资讯

色盲测试图_学前端好还是后端好_廊坊seo外包公司费用_优化资讯

时间:2025/7/12 4:57:26来源:https://blog.csdn.net/weixin_40780178/article/details/143173907 浏览次数:0次
色盲测试图_学前端好还是后端好_廊坊seo外包公司费用_优化资讯

第15天:映射(Map)

学习目标

在本节中,我们将深入理解Go语言中的字典类型(映射),通过例子与图示来帮助你掌握其使用方法。我们将涵盖以下几个方面:

  1. 概念定义
  2. 创建和使用映射
  3. 访问和更新映射中的值
  4. 删除映射中的键
  5. 遍历映射
  6. 映射的特性与注意事项
  7. 实战项目示例
  8. 总结与练习

1. 概念定义

在Go语言中,映射(Map)是一种内置的数据类型,用于存储键值对。每个键必须是唯一的,而每个键对应的值可以是任意类型。映射类似于其他编程语言中的字典、哈希表或关联数组。

特点:

  • 快速查找:映射提供常数时间复杂度的查找。
  • 无序:映射中的元素是无序的。
  • 灵活性:键和值都可以是任意类型。
特性描述
唯一且不可变,可以是字符串、整数等
可以是任何类型,包括切片、结构体等
无序性不保证元素顺序
类型声明使用map[keyType]valueType声明

2. 创建和使用映射

创建映射

映射可以使用make函数创建,也可以使用字面值进行初始化。

示例代码:

package mainimport ("fmt"
)func main() {// 使用make函数创建空映射studentGrades := make(map[string]int)// 使用字面值创建并初始化映射employeeSalaries := map[string]float64{"Alice": 70000,"Bob":   50000,"Charlie": 60000,}fmt.Println(studentGrades)fmt.Println(employeeSalaries)
}

代码运行流程图

┌─────────────────────────┐
│        main()           │
├─────────────────────────┤
│ make(map[string]int)    │
│ ↑                       │
│ └───> studentGrades     │
│                         │
│ map[string]float64{...} │
│ ↑                       │
│ └───> employeeSalaries  │
└─────────────────────────┘

3. 访问和更新映射中的值

访问值

可以通过指定键来访问映射中的值。如果键不存在,返回值类型的零值。

示例代码:

grade := studentGrades["Alice"]
fmt.Println("Alice's grade:", grade) // 输出: Alice's grade: 0 (默认零值)

更新值

直接通过指定键进行赋值。

示例代码:

studentGrades["Alice"] = 90
fmt.Println("Alice's updated grade:", studentGrades["Alice"]) // 输出: 90

4. 删除映射中的键

使用内置的delete函数可以从映射中删除特定的键及其值。

示例代码:

delete(studentGrades, "Alice")
fmt.Println("After deleting Alice:", studentGrades) // 输出: map[] (预期为空映射)

5. 遍历映射

使用for range循环遍历映射中的所有键值对。

示例代码:

for name, salary := range employeeSalaries {fmt.Printf("%s earns $%.2f\n", name, salary)
}

遍历流程图

┌─────────────────────────┐
│     range迭代器        │
├─────────────────────────┤
│ name = key             │
│ salary = value         │
│ ↓                      │
│ 输出 key & value       │
└─────────────────────────┘

6. 映射的特性与注意事项

注意事项

  1. 键的类型:映射的键必须支持比较操作,例如字符串、整数、布尔值等。结构体和切片不能作为键。
  2. 零值行为:如果访问一个不存在的键,该键的值会返回零值,可能导致逻辑错误。
  3. 并发安全:使用映射时需要注意并发条件,Go的映射在并发写入时可能会引发错误。

7. 实战项目示例

假设我们要创建一个简单的图书馆系统,其中每本书的ISBN对应一本书的信息(标题、作者、出版年份等)。

代码实现

package mainimport ("fmt"
)// Book 结构体表示一本书
type Book struct {Title  stringAuthor stringYear   int
}func main() {// 创建一个书籍映射,键为ISBN,值为Book结构体library := make(map[string]Book)// 添加书籍library["978-3-16-148410-0"] = Book{"Go Programming", "John Doe", 2020}library["978-1-23-456789-7"] = Book{"Learning Go", "Jane Smith", 2021}// 访问书籍信息isbn := "978-3-16-148410-0"if book, exists := library[isbn]; exists {fmt.Printf("Book found: %s by %s (%d)\n", book.Title, book.Author, book.Year)} else {fmt.Println("Book not found.")}// 遍历图书馆中的所有书籍for isbn, book := range library {fmt.Printf("ISBN: %s, Title: %s, Author: %s, Year: %d\n", isbn, book.Title, book.Author, book.Year)}// 删除一本书delete(library, "978-3-16-148410-0")fmt.Println("Updated library:", library)
}

代码运行流程图

┌──────────────────────────┐
│        main()           │
├──────────────────────────┤
│ make(map[string]Book)    │
│ ↑                          │
│ └───> library             │
│ ──────────────────────────│
│ 添加书籍到library        │
│ ──────────────────────────│
│ if book.exists()          │
│ └───> 打印书籍信息       │
│ ──────────────────────────│
│ for isbn, book {         │
│ └───> 遍历并打印书籍    │
│ ──────────────────────────│
│ delete(library, "")      │
│ └───> 更新library        │
└──────────────────────────┘

8. 总结与练习

总结

在这一节中,我们深入了解了Go语言的映射类型,学习了如何创建、使用、删除和遍历映射。映射的高效性和灵活性使其成为管理键值对的重要工具。我们还通过实战示例增强了对映射的理解。

练习任务

  1. 创建一个映射,存储城市的名字及其对应的国家,并实现访问、更新和删除操作。
  2. 编写一个程序,统计一段文本中每个单词出现的次数,并将结果存储在映射中。
  3. 将我们图书馆的实现改进一下,支持根据年份查询书籍。

通过以上练习,你将更深入地理解映射的使用和应用场景。


怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!

关键字:色盲测试图_学前端好还是后端好_廊坊seo外包公司费用_优化资讯

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: