首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
Golang
订阅
光君73435
更多收藏集
微信扫码分享
微信
新浪微博
QQ
20篇文章 · 0订阅
[译] part 21: golang goroutines
在前面的教程中,我们讨论了并发以及它与并行的不同之处。在本教程中,我们将讨论如何使用Goroutines在 Go 中实现并发性。 Goroutines是与其他函数或方法同时运行的函数或方法。 Goroutines可以被认为是轻量级线程。与线程相比,创建Goroutine的成本很…
图解golang map 底层实现
map是Go语言中基础的数据结构,在日常的使用中经常被用到。但是它底层是如何实现的呢? Golang中map的底层实现是一个散列表,因此实现map的过程实际上就是实现散表的过程。在这个散列表中,主要出现的结构体有两个,一个叫hmap(a header for a go map)…
Go 并发编程、同步原语与锁
当提到并发编程、多线程编程时,我们往往都离不开『锁』这一概念,Go 语言作为一个原生支持用户态进程 Goroutine 的语言,也一定会为开发者提供这一功能,锁的主要作用就是保证多个线程或者 Goroutine 在访问同一片内存时不会出现混乱的问题,锁其实是一种并发编程中的同步…
《快学 Go 语言》第 9 课 —— 接口
接口是一个对象的对外能力的展现,我们使用一个对象时,往往不需要知道一个对象的内部复杂实现,通过它暴露出来的接口,就知道了这个对象具备哪些能力以及如何使用这个能力。 我们常说「佛有千面」,不同的人看到的佛并不一样。一个复杂的复合对象常常也可以是一个多面手,它具备多种能力,在形式上…
Go语言性能优化- For Range 性能研究
如果我们要遍历某个数组,Map集合,Slice切片等,Go语言(Golang)为我们提供了比较好用的For Range方式。range是一个关键字,表示范围,和for配合使用可以迭代数组,Map等集合。它的用法简洁,而且map、channel等也都是用for range的方式,…
Go 并发 -- 信道
上篇文章讲了关于协程的一些用法,比如如何创建协程、匿名协程等。这篇文章我们来讲讲信道。 信道是协程之间通信的管道,从一端发送数据,另一端接收数据。 使用关键字 chan 创建信道,声明时有类型,表明信道只允许该类型的数据传输。信道的零值为 nil。方式一就声明了 nil 信道。…
图解Golang的channel底层原理
废话不多说,直奔主题。 buf是有缓冲的channel所特有的结构,用来存储缓存数据。是个循环链表 lock是个互斥锁。 recvq和sendq分别是接收(<-channel)或者发送(channel <- xxx)的goroutine抽象出来的结构体(sudog)的队列。是个…
Go 语言接口详解(二)
我们接着上一篇,继续讲接口的其他用法。 上面的代码,结构体 Circle 分别实现了 Shape 接口和 Object 接口,所以可以将结构体变量 c 赋给变量 s 和 p,此时 s 和 p 具有相同的动态类型和动态值,分别调用各自实现的方法 Area() 和 Perimete…
彻底学会 Go 指针 -- 就要学习 Go 语言
写代码的时候,我们通过变量就可以操作存储在内存中的值,进行赋值、加减运算等。大家有没有想过,变量代表什么呢?其实,一个变量对应一段内存空间,这段空间就存储了该变量相对应类型的值。指针的值就对应变量的地址,只通过指针,就可以更新或者读取变量的值,而不需要用到变量名。 上面这段代码…
图解Go语言内存分配
Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会每次内存分配都需要进行系统调用。 Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc…