golang
BanFS
欠的技术债,早晚要还
展开
-
golang非阻塞读写channel
服务器最近压测的时候发现了问题。发现是往channel写数据,但是channel满了,导致服务器部分功能阻塞。golang的channel读或写是会造成阻塞的,但是可以用select的多路复用解决这个问题。不阻塞读channel(也可以加上超时)func readChan(c chan int) (int, error) { select { case num := <-c: return num, nil default: return 0, errors.New("chan do原创 2021-07-23 14:27:08 · 3286 阅读 · 0 评论 -
golang如何快速查询并发写map的位置(concurrent map iteration and map write)
最近项目中高并发时碰到golang碰到了map并发读写的问题。找问题找了好久,可以借助这个方发,编译的时候加上-race,在发生并发读写的地方会有提醒。go run main.go -race会出现DATA RACE,这张图是网上找的,我的的代码是项目代码,不好粘贴。这是一个方法,使用这个也会有所缺陷,例如你的协程就不能开太多了,我记得好像只能开8000多个。最后我的原因是因为一般一个变量会定义在循环之外(这不是理所应当的么,当时写的时候没想那么多,而又是自己的思路,找了好久没找到,最后领导找原创 2021-04-15 19:46:45 · 1410 阅读 · 0 评论 -
golang 实际项目中连接redis集群碰到的坑
项目中redis直接是使用了aws的redis服务,redis是集群,也就是golang连接redis集群碰到的坑,如下 首先我使用的是redisgo,因为看着api比较方便,比较像redis-cli,而且aws也推荐。然后一开始连接也没事,我部署了不下10遍,然而有一天部署时。服务器在操作redis时忽然报错。“(error) MOVED xxxx xxx.xxx.xxx.xxx:xxxx”,经过查询得知这是由于redis没有选择连接集群导致的,再次查询,发现aws官方推荐了...原创 2021-01-26 11:06:04 · 3853 阅读 · 1 评论 -
golang ”优雅关闭的 Go Web 服务器“,可能会碰到的坑。
在最近的项目中,使用了go 搭建了web服务器,所以"优雅的关闭服务器",经过查资料,发现go在1.8之后,http包已经有Shutdown()方法,但是使用起来还是有一些要注意的地方。 如果对go很熟悉的,对这些包很熟悉的人,肯定不会碰到这个问题。只怪我太菜。。。碰到了坑。下面直接上代码。 查询资料的时候,在网上看到这样的代码func gracefullShutdown(server *http.Server, logger *log....原创 2021-01-18 17:41:03 · 1170 阅读 · 1 评论 -
golang 使用time包碰到数字与时间相乘的问题
在项目中使用time包时,睡眠时间时想要通过配置文件获取,然而整数与时间相乘又报错。如下查询time包发现// A Duration represents the elapsed time between two instants// as an int64 nanosecond count. The representation limits the// largest representable duration to approximately 290 years.t...原创 2021-01-25 20:46:01 · 3467 阅读 · 2 评论 -
nodejs aes192加密,在golang中解密碰到的坑
最近改写服务器,集群中服务器是nodejs写的,把其中一个服务器改成golang写的,碰到了nodejsaes192加密,再golang中解密碰到的坑,如下。 在nodejs中是这样加密的const encrypt = (toEncrypt) => { const cipher = crypto.createCipher('aes192', cryptoKey); let encrypted = cipher.update(toEncryp...原创 2021-01-25 20:35:23 · 1178 阅读 · 0 评论 -
怎么在linux中安装golang, 不需要在windows下载好包
其实我已经安装了很久了, 久到我已经忘记怎么安装了, 今天在k8s中调试时, 要重新装golang, 上网查了一下, 发现太多文章都是不太方便的, 例如现在windows下载好包, 再考到linux下解压, 有这么麻烦么, 下面直接上流程1.先下载golang的包这里网上好多文章都是在windows下搜索, 下载好拷贝过去, 其实不用这么干, 在linux中直接下载就好了我是debian 64位的系统, 工作目录是/usr/local. 这样下// 如果你看到这篇文章,可...原创 2021-01-21 19:12:29 · 206 阅读 · 1 评论 -
golang net/http包在k8s使用中碰到http: superfluous response.WriteHeader call from xxx的问题
在项目中,需要使用golang写http服务器并部署在k8s中,在server deployment.yaml中存在livenessProbe(存活探针)以及readinessProbe(就绪探针),这两个我都是写了向服务器发送一个http请求,如果服务器收到并回复,则表示成功,但是在使用过程中,日志一直输出,这些会干扰日志的查看。经过查询与测试,最后修复,做此纪录,代码如下。func healthcheck(w http.ResponseWriter, r *http.Reque...原创 2021-01-21 17:48:37 · 2874 阅读 · 0 评论