Golang常见数据类型底层介绍

  • 切片(slice)
    本质:结构体
    内容:
        - 指向数组头地址的指针(即数组首个元素的内存地址)。
        - 长度,存放元素数量。
        - 容量,底层数组的长度。
    数据结构:数组
  • 映射(map)
    本质:结构体
    内容:
        - 键值对数量
        - 桶数组长度以2为底数的对数
        - 指向当前使用桶数组的指针
        - 指向旧桶数组的指针
        - 哈希种子
    数据结构: 含特化桶的哈希表。
    特化桶介绍: 含key数组、value数组、tophash数组、溢出桶指针。key查找时,通过tophash初步筛选,再比对出目标key。桶溢出后创建溢出桶,通过链表结构连接。
    存旧桶数组指针目的:渐进式完成扩容,通过插入和删除操作,逐步将数据迁移到新桶数组,所有数据完成迁移,才会回收旧桶数组。
  • 通道(chan)
    本质:结构体
    内容:
        - 指向环形缓冲区的指针,无缓冲区通道则存nil
        - 环形缓冲区元素数量
        - 环形缓冲区的容量
        - 等待发送队列,存goroutine信息
        - 等待接收队列,存goroutine信息
        - 互斥锁,所有通道操作都必须先索取锁。
        - 待发送元素索引
        - 待接收元素索引
        - 关闭标识
    数据结构:队列
    环形缓冲区介绍:本质是数组,通过发送或接收元素的索引与数组长度比对,判断要不要回到数组头。所以表现出来是环形的。
posted @ 2025-08-26 14:49  CJTARRR  阅读(5)  评论(0)    收藏  举报