一起学go
文章平均质量分 90
整理下go的笔记,不定时更新
木子林_
博客是用来做笔记的
展开
-
golang并发安全-sync.Once
sync.Once 是 Go 语言中的一种同步原语,用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法,即 Do,该方法接收一个函数参数。在 Do 方法被调用后,该函数将被执行,而且只会执行一次,即使在多个协程同时调用的情况下也是如此。原创 2024-02-04 14:10:15 · 634 阅读 · 0 评论 -
golang并发编程-channel
在golang 并发编程里,经常会听到一句话:不要通过共享内存进行通信,通过通信来共享内存。下面我们会介绍下channel, 通过源码的方式去了解channel是怎么工作的。原创 2024-01-02 14:48:10 · 1344 阅读 · 1 评论 -
golang项目目录推荐
逛GitHub的时候发现有个4.5k对goalng项目结构的推荐的项目,这里就简单的推荐下。原创 2023-12-21 20:48:32 · 1304 阅读 · 0 评论 -
golang并发安全-sync.map
1- sync.map 结构体加了readOnly 和 dirty 来实现读写分离,load,store, delete,range 每次都会优先访问read,后面访问dirty都会双重检测以防加锁前Map.dirty可能已被提升为read2- sync.map不适合写多读少,从store 代码中可以看出会频繁加锁访问dirty,双重检测等等,这些都会导致性能下降3- sync.map 没有提供对read, dirty 的长度方法,这个对象使用在于并发场景下,会额外带来锁竞争的问题。原创 2023-12-27 20:25:23 · 1338 阅读 · 1 评论 -
一起学Go之计时器(Timer/Tick)
前言上篇文章写了关于context 源码解读,里面涉及到不少的计时器,所以我们这篇文章就简单了解下go的计时器。Go的计时器主要Timer和Ticker两种,下面我们开始一起学习下计时器主要结构go的计时器基于Go运行时计时器runtime.timer实现的,rumtime.timer的结构体表示如下type runtimeTimer struct { pp uintptr when int64 period int64 f f原创 2021-10-04 23:17:22 · 3295 阅读 · 0 评论 -
一起学go之Context
前言在go开发中经常使用到context,使用的时候感觉和其他语言(py的flask)上下文有点类似,所以激起我的好奇心,看看go的context都干了啥。看了下源码不多,所以花了点时间,把源码稍微看了看。什么是Context?Context 也叫作“上下文”,一般理解为程序单元的一个运行状态、环境、快照等信息。其中上下是指存在上下层的传递,上会把内容传递给下,程序单元则指的是 Goroutine。Context的作用context 主要用来在 goroutine 之间传递上下文信息,包原创 2021-10-04 16:28:59 · 792 阅读 · 0 评论 -
一起学GO之数组和切片
数组数组定义数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。数组的声明声明语法: var 变量名 [元素数量]类型,默认情况下,一个新的数组中元素的初始值为元素类型的零值,对于数字类型来说就是0 。下面我们来看一个简单的例子package mainimport ( "fmt")func main() { var listName [5]int fmt.Println(lis原创 2021-07-04 13:10:54 · 254 阅读 · 2 评论 -
一起学GO之map
什么是mapMap是一种通过key来获取value的一个数据结构,其底层是散列表,在存储时key不能重复,当我们给定 key,就可以迅速找到对应的 value,不过我们要知道Map 是无序的,我们无法决定它的返回顺序。声明map1-因为map是引用类型,可以使用: var mapname map[keyType]valType2- 通过make内置函数可以创建 map,语法:make(map[keyType] valType) languageMap := map[string]int{"Go":原创 2021-07-04 13:07:05 · 283 阅读 · 2 评论