兄弟连区块链技术培训分享Go语言之源码解读之map

栏目: Go · 发布时间: 7年前

内容简介:互联网二十多年,已到十字路口。区块链出现前的互联网被称为古典互联网,而应用区块链技术的互联网才进入了后互联网时代。作为一项新兴的技术,区块链无疑正处于风口浪尖之上,其发展前景于普通大众而言也终将是利好。但目前由于区块链技术处于发展早期阶段,存在技术成熟度、落地应用场景有限等问题,兄弟连教育建议用户在选择专业在iterate整个map的时候,使用delete是安全的。这跟c++是不一样的,c++在delete的时候,会导致整棵树发生变化,所以不能在迭代的时候删除元素。那为什么golang的map是安全的呢,

互联网二十多年,已到十字路口。区块链出现前的互联网被称为古典互联网,而应用区块链技术的互联网才进入了后互联网时代。作为一项新兴的技术,区块链无疑正处于风口浪尖之上,其发展前景于普通大众而言也终将是利好。但目前由于区块链技术处于发展早期阶段,存在技术成熟度、落地应用场景有限等问题,兄弟连教育建议用户在选择专业 Go语言 + 区块链培训 机构前应进行仔细考量与辨别。

在iterate整个map的时候,使用delete是安全的。这跟c++是不一样的,c++在delete的时候,会导致整棵树发生变化,所以不能在迭代的时候删除元素。

那为什么golang的map是安全的呢,从源码来看,golang的map使用了桶的概念,元素是被hash到桶存储,每个桶预设是存储八个kv,而且在头部有一个uint8 tophash[8]的结构,存储每个key的高八位(即hash(key) » (64 - 8)),如果该位置未被放置元素,则有一个特殊的标志Empty。在插入删除的时候,首先会比较该uint8跟hash(key)是否相等。当然,桶还利用了overflow指针,可以无限的增长,类似链表。

所以,for循环其实是对每个桶进行迭代,判断每个uint8位置,删除操作也并不是实际的memset,而是把对应的tophash的位置置为Empty.因此,在迭代golang的map过程中,使用delete是安全的。

struct Hmap

{

uintgo  count;        // # live cells == size of map.  Must be first (used by len() builtin)

uint32  flags;

uint32  hash0;        // hash seed

uint8   B;            // log_2 of # of buckets (can hold up to LOAD * 2^B items)

uint8   keysize;      // key size in bytes

uint8   valuesize;    // value size in bytes

uint16  bucketsize;   // bucket size in bytes

byte    *buckets;     // array of 2^B Buckets. may be nil if count==0.

byte    *oldbuckets;  // previous bucket array of half the size, non-nil only when growing

uintptr nevacuate;    // progress counter for evacuation (buckets less than this have been evacuated)

};

typedef struct Bucket Bucket;

struct Bucket

{

uint8  tophash[BUCKETSIZE]; // top 8 bits of hash of each entry (0 = empty)

Bucket *overflow;           // overflow bucket, if any

byte   data[1];             // BUCKETSIZE keys followed by BUCKETSIZE values

};

高能预警,兄弟连教育区块链直播课程8月持续火爆来袭!

原价1188元的12节区块链进阶课程,现仅需1元!

还可免费领取《Go语言基础实战项目开发》与《Go语言高级实战项目开发》教材两本!!限时限量!!先到先得!!

http://www.ydma.cn/open/course/24

兄弟连区块链技术培训分享 <a href='https://www.codercto.com/topics/6127.html'>Go</a> 语言之源码解读之map

关注兄弟连区块链技术公众号领取更多技术干货哦!!! 

兄弟连区块链技术培训分享Go语言之源码解读之map

以上所述就是小编给大家介绍的《兄弟连区块链技术培训分享Go语言之源码解读之map》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大数据之眼

大数据之眼

[德]尤夫娜·霍夫施泰特 / 陈巍 / 浙江文艺出版社 / 2018-5-7 / 68.00元

德国狂销10万册的大数据商业应用畅销书,经典之作《大数据时代》的姊妹篇。 该书在德语国家促发了一场关于大数据,人工智能与人的关系建构的大讨论。 德国大数据与人工智能领域权威,首度为中国读者亲笔作序。 在后大数据时代,如何维护自己的隐私,如何巧妙利用资源获得更多金钱? 一部对大数据发展所产生的问题进行思考和规避的先知式作品。 当智能机器欲“优化”我们,入侵我们的生活,统......一起来看看 《大数据之眼》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具