go语言基础
陽光微涼
这个作者很懒,什么都没留下…
展开
-
Go语言在select语句中实现优先级
原文https://www.liwenzhou.com/posts/Go/priority_in_go_select/已知,当select 存在多个 case时会随机选择一个满足条件的case执行。现在我们有一个需求:我们有一个函数会持续不间断地从ch1和ch2中分别接收任务1和任务2,如何确保当ch1和ch2同时达到就绪状态时,优先执行任务1,在没有任务1的时候再去执行任务2。func worker2(ch1, ch2 <-chan int, stopCh chan struct{}) {原创 2020-11-03 16:41:25 · 605 阅读 · 0 评论 -
go语言map底层实现
go语言map底层实现笼统的来说,go的map底层是一个hash表(HashMap),表面上看map只有键值对结构,实际上在存储键值对的过程中涉及到了数组和链表。HashMap之所以高效,是因为其结合了顺序存储(数组)和链式存储(链表)两种存储结构。数组是HashMap的主干,在数组下有一个类型为链表的元素。哈希函数会将传入的key值进行哈希运算,得到一个唯一的值。go语言把生成的哈希值一分为...原创 2019-07-19 01:59:30 · 1704 阅读 · 3 评论 -
sync.Once与sync.WaitGroup
sync.Once与sync.WaitGroupsync.Once实现单例模式package mainimport ( "fmt" "sync" "time")var once sync.Oncefunc main() { for i := 0; i < 10; i++ { once.Do(onces) fmt.Println("1", "---", i)...原创 2019-07-23 21:01:04 · 190 阅读 · 0 评论 -
go语言中的垃圾回收机制(gc)
go语言中的垃圾回收机制(gc)引用计数法适用于内存占用小于32kb时使用在每个对象内部维护一个整数值,叫做这个对象的引用计数,当对象被引用时引用计数加一,当对象不被引用(释放、置nil)时引用计数减一。当引用计数为 0 时,自动销毁对象。另外的缺陷是,每次对象的赋值都要将引用计数加一,增加了消耗。Mark-Sweep法(标记清除法)(go早期使用)这个算法分为两步,标记和清除。标记:...原创 2019-07-17 01:41:21 · 547 阅读 · 0 评论 -
go语言模拟切片的实现
go语言模拟切片的实现切片的本质// 定义切片类型type Slice struct { Data unsafe.Pointer // Go语言中的 万能指针类型. void * C语言中的万能指针. 没有具体数据类型,不能进行运算. Len int // 数据元素个数 Cap int // 可扩展的有效容量}C语言内存的使用#include <stdlib.h>...原创 2019-07-17 01:15:05 · 196 阅读 · 0 评论