golang学习笔记——数据结构进阶

数据结构进阶

常见数据结构实现原理

本章主要介绍常见的数据结构,比如channel、slice、map等,通过对其底层实现原理的分析,来加深认识,以此避免一些使用过程中的误区。

map

  1. map 读取某个值时 - 返回结果可以为 value,bool 或者 value。注意后者,在key不存在时,会返回value对应类型的默认值
  2. maprange 方法需要注意 - key,value 或者 key。注意后者,可以和slice的使用结合起来
  3. map 的底层相关的实现 - 串联 初始化、赋值、扩容、读取、删除 这五个常见实现的背后知识点,详细参考示例代码链接与源码

map示例

  1. maprange 操作 - key、value 都是值复制
  2. map 如何保证按key的某个顺序遍历? - 分两次遍历,第一次取出所有的key并排序;第二次按排序后的key去遍历(这时你可以思考封装map和slice到一个结构体中)?
  3. map 的使用上,有什么要注意的? - 遍历时,尽量只修改或删除当前key,操作非当前的key会带来不可预知的结果
  4. map 的设计上,我们可以学到 - Go语言对map底层的hmap做了很多层面的优化与封装,也屏蔽了很多实现的细节,适用于绝大多数的场景;而少部分有极高性能要求的场景,就需要深入到hmap中的相关细节。

slice

  1. 熟悉 slice 的底层数据结构 - 实际存储数据的array,当前长度len与容量cap
  2. slice的扩容机制 - 不严格来说,当长度小于1024时,cap翻倍;大于1024时,增加1/4
  3. slice 有很多特性与 map 一致 - 记住一点,代码中操作的slicemap只是上层的,实际存储数据的是arrayhmap

interface

  1. interface的两种类型 - 数据结构的interface,侧重于类型;面向对象中接口定义的interface,侧重于方法的声明
  2. 了解interface的底层定义 - efaceiface,都分为两个部分:类型数据
  3. iface底层对类型匹配进行了优化 - map+mutex组合

embedded

  1. embedded的核心思想 - 面向对象中的组合思想,主要体现出了代码复用
  2. 项目实战中,常见用到embedded的场景 - 结构体之间存在大量的复用的逻辑,抽象出一个基类来作为embedded
  3. interface的设计原则 - 方法尽量少,通过组合来实现复杂的interface

相关推荐

  1. golang学习笔记——数据结构

    2023-12-15 13:44:04       36 阅读
  2. Web 前端—— Http 和数据结构 学习笔记

    2023-12-15 13:44:04       14 阅读
  3. 【Python(七)】——Series数据结构

    2023-12-15 13:44:04       14 阅读
  4. python学习笔记----函数(七)

    2023-12-15 13:44:04       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-15 13:44:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-15 13:44:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-15 13:44:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-15 13:44:04       20 阅读

热门阅读

  1. 什么是数据分析?

    2023-12-15 13:44:04       37 阅读
  2. Python实现图像批量png格式转为npy格式

    2023-12-15 13:44:04       36 阅读
  3. 【ubuntu】Linux常用截屏软件

    2023-12-15 13:44:04       41 阅读
  4. C++学习-2023/12/13-C++类型转换

    2023-12-15 13:44:04       32 阅读
  5. Centos系统上nginx安装

    2023-12-15 13:44:04       27 阅读
  6. 设计类的时候面向对象遵循的原则 SOLID

    2023-12-15 13:44:04       39 阅读
  7. 8位LED流水灯设计

    2023-12-15 13:44:04       39 阅读
  8. QT文件介绍

    2023-12-15 13:44:04       37 阅读
  9. Golang 切片相关笔记

    2023-12-15 13:44:04       35 阅读
  10. GPT-4:背景、技术特点、发展、应用与前景

    2023-12-15 13:44:04       43 阅读
  11. 用服务器搭建网站需要做什么

    2023-12-15 13:44:04       37 阅读