![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golong
文章平均质量分 71
honky_tonk_man
这个作者很懒,什么都没留下…
展开
-
golang gob
前言golang的gob是干嘛的?首先我们有一串数据,我们想让这些数据序列化,但是怎么序列化,序列化的格式是什么?我们都可以通过encoder去定义,比如我们想让一大坨数据(比如非常复杂的结构)序列化成json格式,或者序列化成array等等,我们如何序列化呢?我们使用encoding/gob这个包进行序列化gob简介先贴上官网的简介Package gob manages streams of gobs - binary values exchanged between an Encoder (t原创 2022-04-30 17:20:58 · 287 阅读 · 0 评论 -
golang select
关于golang selectselect说实在很抽象…看了好多博客也讲的不咋地,自己刚刚敲了一遍这里写个总结select使用select{ case CHANNEL OUTPUT : //do something case CHANNEL OUTPUT: //do something ... ... ...}基本语法是进入一个select然后就阻塞住了,除非里面有一个case后面的channel传进一个东西才会执行对应case后面的句子上面的解释大家都知道,但是假设我有2个ch原创 2022-04-21 19:57:08 · 247 阅读 · 0 评论 -
dead lock vs live lock
文章目录前言死锁活锁sync.condlivelock前言因为有一些工程上的问题一直被活锁给折磨,这里我要讲一下死锁和活锁的区别死锁死锁和活锁非常相似,死锁就是一个线程直接占有一个公共变量,且因为一些原因不能release,其他的线程访问直接被阻塞,死锁不消耗cpu如下package mainimport ( "fmt" "sync" "time")type pub struct { mu sync.Mutex element int}func goroutin原创 2022-04-20 17:40:16 · 378 阅读 · 0 评论 -
goroutine中再创建一个goroutine
文章目录前言代码goroutine原理前言今天写代码的时候突发奇想goroutine中是否可以再运行一个goroutine,初步的想法是可以的,因为main函数运行的时候其实是一个主goroutine,在主goroutine里面再运行一个goroutine是没问题的,那么我们一个普通的goroutine运行一个goroutine不也是同理?代码我们直接上代码package mainimport ( "fmt" "time")func main() { go func() { g原创 2021-12-23 21:58:42 · 824 阅读 · 0 评论 -
go实现在随机时间阻塞中唤醒
文章目录前言randsleep唤醒前言今天要实现raft的requestvote功能,首先什么时候发送requestvote呢?当然是要选举的时候,为什么要开始选举呢?当然是timeout了,但是当我们timeout的时候paper5.2规定timeout时间为150ms~300ms,所以这个时候需要用到rand生成随机数,然后睡眠时间设为这个随机数,没有收到心跳包文我就不重置,光凭我描述这么多,就涉及到goroutine,channel,select,rand,time.sleep等内容,我的设想是先原创 2021-12-10 20:17:02 · 888 阅读 · 0 评论 -
golang rpc的一些坑
文章目录前言rpc前言好久没有写golang有点生疏,今天一写遇到几个坑,一个是rpc的一些坑,还有一个是结构体初始化的一些坑…rpcrpc都知道是远程系统调用,网上也有不少的例子我就不例举了,这里我们要讲的例子是,rpc除了client可以借用rpc server对外提供的方法进行运算之外,client还可以通过rpc server提供的rpc方法去改server中相应的结构成员变量,如下我只提供了一个方法,这个方法就是更改rpc server上结构体用的//serverpackage ma原创 2021-12-09 18:18:17 · 763 阅读 · 0 评论 -
The Go Memory Model(翻译版)
文章目录前言介绍建议开始之前同步初始化创建goroutinegoroutine退出go channel 通讯锁机制once错误的同步前言在学习mit 6.824的时候有一节课讲到go线程和内存管理,此节课的要求是先把golang官方的go memory model读完,我在看的时候索性就随手翻译一下,原文的链接在此介绍Go 内存模型指定了在何种条件下可以保证在一个 goroutine 中读取变量时观察到在不同 goroutine 中写入相同变量所产生的值。建议当我们程序设定一个变量要被多个gor原创 2021-11-23 16:45:48 · 500 阅读 · 0 评论 -
golang实现“echo XXX >> filename“
文章目录前言Fprintf前言我这里有一个需求,需要将我目前的结构体中的内容输出到文件中(累加不是覆盖),这个需求如果在bash shell中非常容易实现直接echo XXX >> filename即可,但是在golang中呢?Fprintf这里介绍标准库中的一个函数Fprintf,第一个大写F表面文件指针,最后一个f表示format格式化,故名思意是在一个文件中实现格式化输入,所以假设我们有一个文件file1,要对他进行输入固定的内容可以按照如下的方式进行操作ofile,_ := o原创 2021-11-19 18:26:43 · 377 阅读 · 0 评论 -
golang之删除切片指定元素
文章目录前言append详解删除元素前言今天还是用golang搬砖,突然遇到一个删除切片中指定元素的需求,我在想有向切片中添加元素的内置函数,删除的有没有,没想到一搜没有…而且大概看了一下大家都是用append实现指定元素删除,效率貌似还挺高,今天就记录一下怎么用append删除指定元素append详解append首先是将数组上层的切片取出,然以我们向其后方添加一个元素,然后返回新的切片,但是切片有一个非常好的功能就是切片截断,比如我有一个切片a := []int{1,2,3,4,5,6,7,8,原创 2021-11-18 19:18:52 · 781 阅读 · 0 评论 -
golang Error
文章目录前言Q&AError使用技巧前言今天用golang写MIT6.824的lab1时想到如何用golang做错误处理,想起golang有error库我们这里来探讨一下他Q&AQ:异常和错误有区别吗?A:异常和错误还是有区别的,简而言之异常是我们意料内发生的,我们可以不管他(如果不重要的话),也可以直接报错退出程序(如果异常重要),错误是发生于意料之外Errorgolang有3种处理错误的机制分别为panic,recover,error首先panic传入一个interfac原创 2021-11-17 18:48:42 · 76 阅读 · 0 评论