首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
通俗易懂深入Go语言
菜刚RyuGou
创建于2021-05-31
订阅专栏
用最简单、最直白、最易懂的方式来了解Go语言的原理知识,并以Go语言为引子,渗透至计算机、互联网的底层知识
等 12 人订阅
共16篇文章
创建于2021-05-31
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
细谈Go引用的底层实现
你确定Go有引用?得了吧~ Go怎么可能有引用?点开链接,听我细细给你讲讲,啥叫引用,Go到底有没有引用
细谈Go变量的内存分布
Go中的变量都存在内从中的什么地方?你想要知道吗?快来查看文章吧,不要忘记点赞和订阅我的栏目哦~谢谢!
为什么Go语言不允许循环引入?
每当Go程序编译出现循环引入报错的时候就非常让人头疼。 Go语言的packa和其他语言中的库、模块是相同的概念,在其他语言中,实现某个库或者模块需要建立"单独的项目",而在Go中,仅仅是一个包就够了。 从这个角度来讲,Go语言不允许循环引入,算是合情合理的,因为Go中的pack…
图解Go的unsafe.Pointer
相信看过Go源码的同学已经对unsafe.Pointer非常的眼熟,因为这个类型可以说在源码中是随处可见:map、channel、interface、slice...但凡你能想到的内容,基本都会有unsafe.Pointer的影子。 接下来,我们就来了解一下Go的这个“不安全的…
图解go反射实现原理
Go反射的实现和interface和unsafe.Pointer密切相关。如果对golang的interface底层实现还没有理解,可以去看我之前的文章:Go语言interface底层实现,unsafe.Pointer会在后续的文章中做介绍。 Go语言中,每个变量都有唯一个静态…
图解Golang的内存分配
以上是程序内存的逻辑分类情况。 Go是内置运行时的编程语言(runtime),像这种内置运行时的编程语言通常会抛弃传统的内存分配方式,改为自己管理。这样可以完成类似预分配、内存池等操作,以避开系统调用带来的性能问题,防止每次分配内存都需要系统调用。 内存分配算法采用Google…
图解Golang的channel底层原理
废话不多说,直奔主题。 buf是有缓冲的channel所特有的结构,用来存储缓存数据。是个循环链表 lock是个互斥锁。 recvq和sendq分别是接收(<-channel)或者发送(channel <- xxx)的goroutine抽象出来的结构体(sudog)的队列。是个…
图解Go select语句原理
Go 的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的;当select中没有case语句的时候,会阻塞当前的groutine。所以,有人也会说select是用来阻塞监听goroutine的。 还有人说:select是Golang在语言…
图解Golang的GC算法
虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。 经典的GC算法有三种:引用计数(reference counting)、标记-清扫(mark & sweep)、复制收集(Copy and Collec…
Go并发原理
Go语言是为并发而生的语言,Go语言是为数不多的在语言层面实现并发的语言;也正是Go语言的并发特性,吸引了全球无数的开发者。 并发(concurrency):两个或两个以上的任务在一段时间内被执行。我们不必care这些任务在某一个时间点是否是同时执行,可能同时执行,也可能不是,…
Golang非CSP并发模型外的其他并行方法总结
Golang最为让人熟知的并发模型当属CSP并发模型,也就是由goroutine和channel构成的GMP并发模型,具体内容不在赘述了,可以翻回之前的文章查看。在这里,要讲讲Golang的其他并发方式。 Golang不仅可以使用CSP并发模式,还可以使用传统的共享数据的并发模…
图解Go语言interface底层实现
Go的interface源码在Golang源码的runtime目录中。 Go在不同版本之间的interface结构可能会有所不同,但是,整体的结构是不会改变的,此文章用的Go版本是1.11。 Go的interface是由两种类型来实现的:iface和eface。 一共有两个属性…
图解golang map 底层实现
map是Go语言中基础的数据结构,在日常的使用中经常被用到。但是它底层是如何实现的呢? Golang中map的底层实现是一个散列表,因此实现map的过程实际上就是实现散表的过程。在这个散列表中,主要出现的结构体有两个,一个叫hmap(a header for a go map)…
golang错题集
本文即Go语言的那些坑三。 输出的都是“annei”,而“annei”又是“names”的最后一个元素,那么也就是说程序打印出了最后一个元素的值,而name对于匿名函数来讲又是一个外部的值。因此,我们可以做一个推断:虽然每次循环都启用了一个协程,但是这些协程都是引用了外部的变量…
Golang奇葩点
本文即Go语言的那些坑二。 可以正常编译通过。 不能编译通过。 在上述代码中,匿名函数中记录的是循环变量的内存地址,而不是循环变量某一时刻的值。 其实就加了条elem := e看似多余,其实不,这样一来,每次循环后每个匿名函数中保存的就都是当时局部变量elem的值,这样的局部变…
Go语言的那些坑
Golang是我最喜欢的一门语言,它简洁、高效、易学习、开发效率高、还可以编译成机器码... 虽然它一出世,就饱受关注,而且现在在市面上逐渐流行开来,但是,它毕竟是一门新兴语言,还有很多让人不太习惯的地方(即坑,(^__^)),我作为新手,一边学习,一边踩坑,希望对其他人有借鉴…