![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
文章平均质量分 94
百雨
希望在工作过程中将问题与解决方案记录下来
展开
-
Go 高级并发
Go 高级并发原文地址:https://encore.dev/blog/advanced-go-concurrency 原文作者:André Eriksson 译文出处:https://encore.dev/blog 本文永久链接:https://github.com/gocn/translator/blob/master/2020/w1_advanced_go_concurrency.md 译者:咔叽咔叽 校对者:fivezh如果你曾经使用过 Go 一段时间,那么你可能了解一些 Go 中的转载 2020-07-24 13:44:09 · 725 阅读 · 0 评论 -
go 生成邀请码,可逆
背景日常的网站开发中,会遇到网站的促销活动,就有涉及到邀请好礼的功能 成功邀请好友,则获取相应奖励,这时候,就有邀请码的需求 邀请码要求每个用户唯一 方法一. 可根据用户的uid生成邀请码 方法二. 邀请码可根据某个初始化id生成,用户主动请求,生成code,绑定uid 方法二,这种方式,需额外记录uid和code关系 方法一,根据uid生成,也可根据code反推出uid,不用额外查询,比较方便实现记录方法一的实现 由长数字转换为特定长度的code转载 2020-07-06 13:11:07 · 3859 阅读 · 0 评论 -
go 协程池使用提示
main.gopackage mainimport ( "fmt" conc "github.com/micro/examples/Test/Concurrence" "runtime" //"runtime" "time")//定义一个实现Job接口的数据type Score struct { Num int}//定义对数据的处理func (s *Score) Do() { fmt.Println("num:", s.Num) //t转载 2020-07-01 11:45:13 · 166 阅读 · 0 评论 -
golang日志框架之logrus
golang日志库golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持。所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位。golang中,流行的日志框架包括logrus、zap、zerolog、seelog等。logrus是目前Github上star数量最多的日志库,目前(2018.08,下同)star数量为8119,fork数为1转载 2020-06-24 12:55:08 · 2905 阅读 · 0 评论 -
go 解析csr参数(完整)
(1)参数:原始csr 格式如:-----BEGIN CERTIFICATE REQUEST-----............................-----END CERTIFICATE REQUEST-----(2)返回值:生成csr时的参数 都能解析出来, 邮箱邮编也在key.Subjet里,仿照写出即可(3)代码如下:import ( "crypto/ecdsa" "crypto/rsa" "crypto/x509" "encoding/p..原创 2020-05-15 11:51:32 · 2131 阅读 · 0 评论 -
go mod 无法下载依赖问题
从Go 1.11版本开始,官方支持了go module包依赖管理工具。还新增了GOPROXY环境变量。用来设置代理,设置代理后,下载源代码时将会通过这个代理地址,而不再是以前的直接从代码库下载。# Linux / macOSexport GOPROXY=https://goproxy.io# Windows$env:GOPROXY = "https://goprox...原创 2020-04-14 10:12:08 · 4940 阅读 · 0 评论 -
go资料
作者:知乎用户链接:https://www.zhihu.com/question/30461290/answer/210414739来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。学习任何一门语言,都要学习好基础,把基础打牢,那些框架对你来说都是工具,你自己的基础好,懂得了他们的原理,自己就可以创造更优秀的框架。基础推荐官方文档,没有什么比这个更清晰...转载 2020-04-10 19:48:41 · 310 阅读 · 0 评论 -
部署超简单的 Golong 分布式 WebSocket 微服务
使用场景在实现业务的时候,我们常常有些需求需要系统主动发送消息给客户端,方案有轮询和长连接,但轮询需要不断的创建销毁 http 连接,对客户端、对服务器来说都挺消耗资源的,消息推送也不够实时。这里我们选择了 WebSocket 长连接的方案。有大量的项目需要服务端主动向客户端推送消息,为了减少重复开发,我们做成了微服务。使用于服务器需要主动向客户端推送消息、客户端需要实时获取消息的请求...转载 2020-04-10 13:30:43 · 1972 阅读 · 0 评论 -
go反射
Go语言的反射反射是语言里面是非常重要的一个特性,我们经常会看见这个词,但是对于反射没有一个很好的理解,主要是因为对于反射的使用场景不太熟悉。一、理解变量的内在机制1.类型信息,元信息,是预先定义好的,静态的。2.值信息,程序进行过程中,动态变化的。二、反射和空接口1.空接口相当于一个容器,能接受任何东西。2.那怎么判断空接口变量存储的是什么类型呢?之前有使...转载 2020-04-09 01:34:30 · 155 阅读 · 0 评论 -
go简单协程池实现
为防止无限制开启gorouting造成的cpu性能浪费以及更严重的内存溢出和程序崩溃,这里加单实现一下协程池深入理解:http://marcio.io/2015/07/handling-1-million-requests-per-minute-with-golang/流程图:代码实现:package mainimport ( "fmt" "time")//...原创 2020-01-28 00:47:40 · 489 阅读 · 0 评论 -
go语言错题集(坑)【三】
系列相关:go语言错题集(坑)【一】go语言错题集(坑)【二】go语言错题集(坑)【三】目录不要对Go并发函数的执行时机做任何假设假设T类型的方法上接收器既有T类型的,又有*T指针类型的,那么就不可以在不能寻址的T值上调用*T接收器的方法一个包含nil指针的接口不是nil接口将map转化为json字符串的时候,json字符串中的顺序和map赋值顺序无关Js...转载 2020-01-17 00:22:55 · 458 阅读 · 0 评论 -
go语言错题集(坑)【二】
系列相关:go语言错题集(坑)【一】go语言错题集(坑)【二】go语言错题集(坑)【三】目录Golang中函数被看做是值,函数值不可以比较,也不可以作为map的key匿名函数作用域陷阱[3]int和[4]int不算同一个类型数组还可以指定一个索引和对应值的方式来初始化。不能对map中的某个元素进行取地址&操作当map为nil的时候,不能添...转载 2020-01-17 00:19:54 · 647 阅读 · 0 评论 -
go语言错题集(坑)【一】
系列相关:go语言错题集(坑)【一】go语言错题集(坑)【二】go语言错题集(坑)【三】目录文件名字不要轻易以__test.go为结尾语句fmt.Println("这里是汉字:" + 字符串变量)字符串变量的值打印不出来的问题多个defer出现的时候,多个defer之间按照LIFO(后进先出)的顺序执行panic中可以传任何值,不仅仅可以传string用...转载 2020-01-17 00:13:26 · 759 阅读 · 0 评论 -
秒杀系统的艺术【内有库存问题解决方法】
目录12306抢票,极限并发带来的思考?1. 大型高并发系统架构2.秒杀抢购系统选型3. 扣库存的艺术4. 代码演示5.总结回顾12306抢票,极限并发带来的思考?每到节假日期间,一二线城市返乡、外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会。尤其是春节期间,大家不仅使用12306,还...转载 2020-01-13 22:04:09 · 1388 阅读 · 0 评论 -
【go链表排序】常数级空间复杂度、nlogn时间复杂度
package mainimport "fmt"type ListNode struct { Val int Next *ListNode}//头结点,不存储元素,主要用于头插法type LinkList struct { HeadNode *ListNode}//头插法,原来的头结点始终不变,只是将原来的头结点的HeadNode指向新申请结点//新申请的结点又指向...原创 2020-01-06 17:40:56 · 328 阅读 · 0 评论 -
go合并两个有序列表
题目: 将两个有序链表合并为一个新的有续链表并返回。新链表是通过拼接给定的两个链表的所有节点做成的。思路:1、如果给定的两条链表中有一条为空,返回另一条即可2、若两条链表都不为空,则在两条链表中选择较小的节点作为head,被选中的较小节点所在链表的第二个节点便成了二当家带领这条链表3、二当家带领着这条链表与另一条链表进行比较,始终选择较小的节点连在head后面。4...原创 2020-01-02 21:31:27 · 1070 阅读 · 0 评论 -
谈Go语言中并发Map的使用
最近开发Go语言总是遇到哈希表的使用,在高并发下如何保证读写的安全性尤为重要,假如不了解的情况下,使用原生map的话,性能倒是很高,但在多个goroutine操作下就会遇到并发读写的错误出现。为了并发安全,修改读写访问,每次都写都加入读写锁,又会导致性能的大幅度下降,安全和性能实在是难以同时兼得。这里我们梳理下Go当前访问Map的几种方式,并给出实际的测试实例和性能表现。1. 标准库map...转载 2019-12-30 23:24:06 · 1150 阅读 · 0 评论 -
go语言坑之并发访问map
go提供了一种叫map的数据结构,可以翻译成映射,对应于其他语言的字典、哈希表。借助map,可以定义一个键和值,然后可以从map中获取、设置和删除这个值,尤其适合数据查找的场景。但是map的使用有一定的限制,如果是在单个协程中读写map,那么不会存在什么问题,如果是多个协程并发访问一个map,有可能会导致程序退出,并打印下面错误信息:fatal error: concurrent ma...转载 2019-12-30 21:50:25 · 668 阅读 · 0 评论 -
go语言context保存上下文
contxt保存上下文适合全局参数传递,而普通的参数传递就没必要用context,因为不好维护关于context具体用法可以参考:https://studygolang.com/articles/23247?fr=sidebarpackage mainimport ( "context" "fmt")func processPassValue(ctx context.C...原创 2019-12-25 00:10:24 · 1048 阅读 · 0 评论 -
go语言context超时控制代码示例
package mainimport ( "context" "fmt" "io/ioutil" "log" "net/http" "time")//存储响应结果type Result struct { resp *http.Response err error}func process(){ ctx, cancel := context.WithTimeout...原创 2019-12-24 23:34:46 · 387 阅读 · 0 评论 -
【golang】序列化例子浅析类属性大小写区别
我们知道Golang里都是通过结构体Struct来定义类和相关属性的。这里有点需要注意的是,属性的首字母大小写表示的意义是不同的!go中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用。可以简单的理解成,首字母大写是公有的,首字母小写是私有的但是这些都不是重点,毕竟这些很多人都知...转载 2019-12-19 19:17:33 · 743 阅读 · 0 评论 -
结构体、通道、并发实现生产者消费者
要求:利用生产者消费者实现对一个随机数所有位求和(体现结构体与通道)实现:item结构体存储id与一个随机数,itemChan作为通道存储item结构体result结构体存储item指针与对item的num随机数所有位求和的结果,resultChan作为通道存储result结构体启动两个生产者,利用函数实现自定义启动n个消费者,关键是最后的printResult函数,与通道交流时同...原创 2019-12-05 01:15:14 · 144 阅读 · 0 评论 -
go的简单并发之goroutine与WaitGroup
WaitGroup跟java的CountdownLatch以及python里的join方法差不多,也是阻塞等待所有任务完成之后再继续执行。WaitGroup的用途:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。WaitGroup总共有三个方法:Add(delta int),Done(),Wait()。简单的说一下这三个方法的作...原创 2019-11-26 02:10:59 · 1029 阅读 · 0 评论