刷新
这不会又是一个Go的BUG吧?

博主头像 hello,大家好呀,我是小楼。 最近我又双叒叕写了个BUG,一个线上服务死锁了,不过幸亏是个新服务,没有什么大影响。 出问题的是Go的读写锁,如果你是写Java的,不必划走,更要看看本文,本文的重点在于Java和Go的读写锁对比,甚至看完后你会有一个隐隐的感觉:Go的读写锁是不是有BUG? 故障回 ...

Golang接口型函数使用技巧

博主头像 原文链接:https://www.zhoubotong.site/post/51.html 什么是接口型函数?顾名思义接口函数指的是用函数实现接口,这样在调用的时候就会非常简便,这种方式适用于只有一个函数的接口。 这里以迭代一个map为例,演示这一实现的技巧。 常规接口实现 defer语句用于延迟函 ...

golang的defer踩坑汇总

博主头像 原文链接:http://www.zhoubotong.site/post/50.html defer语句用于延迟函数调用,每次会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。延迟函数可以有参数: 延迟函数的参数在defer语句出现时就已确定下来(传值的就是当前值) return先赋值(对于 ...

流量管制-令牌桶与漏桶

博主头像 Principle of token bucket 随着互联网的发展,在处理流量的方法也不仅仅为 first-come,first-served,而在共享网络中实现流量管理的基本机制就是排队。而公平算法则是实现在优先级队列中基于哪些策略来排队的”公平队列“。Token Bucket 则是为公平排队提 ...

strchecker——Go源码字符串规范检查lint工具

博主头像 1.背景 在大型项目开发过程中,经常会遇到打印大量日志,输出信息和在源码中写注释的情况。对于软件开发来说,我们一般都是打印输出英文的日志(主要考虑软件在各种环境下的兼容性,如果打印中文日志可能会出现乱码,另外英文日志更容易搜索,更容易后续做国际化),但是对于我们中国人来说,很容易就把中文全角的中文标 ...

AES加解密(golang <--> crypto-js)

博主头像 AES(Advanced Encryption Standard) 是一种对称加密算法,是比 DES 更好的对称加密算法类。 使用AES,在前后端之间传送密码等相关数据时,能简单高效的提高安全性。 前端的 AES(javascript/typescript) 前端的加密库一般用 crypto-js。 ...

对不起,我错了,这代码不好写

博主头像 hello,大家好呀,我是小楼。 前几天不是写了这篇文章《发现一个开源项目优化点,点进来就是你的了》嘛。 文章介绍了Sentinl的自适应缓存时间戳算法,从原理到实现都手把手解读了,而且还发现Sentinel-Go还未实现这个自适应算法,于是我就觉得,这简单啊,把Java代码翻译成Go不就可以混个P ...

golang tcp keepalive研究记录(基于websocket)

为什么有tcp Keepalive? 服务器和客户端建立tcp连接以后,客户端/服务器如何知道对方是否挂掉了? 这时候TCP协议提出一个办法,当客户端端等待超过一定时间后自动给服务端发送一个空的报文,如果对方回复了这个报文证明连接还存活着,如果对方没有报文返回且进行了多次尝试都是一样,那么就认为连接 ...

go程序添加远程调用tcpdump功能

博主头像 最近开发的telemetry采集系统上线了。听起来高大上,简单来说就是一个grpc/udp服务端,用户的机器(路由器、交换机)将它们的各种统计数据上报采集、整理后交后端的各类AI分析系统分析。目前华为/思科的大部分设备支持。 上线之后,各类用户开始找来要求帮忙定位问题,一般是上报的数据在后端系统中不 ...

golang 应用自升级

博主头像 概要 最近遇到一个需求,golang应用部署在远程机器,远程机器在内网,部署之后不方便再次登录此远程机器去升级。 因此,需要golang应用自动检查是否需要升级,如果需要升级,则下载二进制后自升级。 自升级库 golang自升级的库有好几个,比较之后决定采用: https://github.com/ ...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/bosima/ylog/releases/tag/v1.0.1 工程实践中,我们往往还需要对日志进行 ...

Go sort包

博主头像 sort包简介 官方文档 Golang的sort包用来排序,二分查找等操作。本文主要介绍sort包里常用的函数,通过实例代码来快速学会使用sort包 sort包内置函数 sort.Ints(x []int) ints := []int{1, 4, 3, 2} fmt.Printf("%v\n", i ...

Golang:手撸一个支持六个级别的日志库

Golang标准日志库提供的日志输出方法有Print、Fatal、Panic等,没有常见的Debug、Info、Error等日志级别,用起来不太顺手。这篇文章就来手撸一个自己的日志库,可以记录不同级别的日志。 其实对于追求简单来说,Golang标准日志库的三个输出方法也够用了,理解起来也很容易: P ...

Go 简单入门

博主头像 GO的环境配置? GOPATH GOROOT 都是干嘛用的? 配置环境跟java对比有点奇怪 https://blog.csdn.net/weixin_40563757/article/details/115476327 语言特性 协程? 建立一个协程很简单 加一个go关键字就可以 package ...

使用Go搭建并行排序处理管道笔记

博主头像 一、并行管道搭建: 总结下实现思路: 归并排序:进行集合元素排序(节点),并两两节点归并排序;每个节点元素要求有序的(排序),当然终点最小节点元数个数为1必是有序的; 节点:任务处理单元,归并排序节点是处理输出有序集合任务的单元;文件过大单台机排不了需要多台机集群; 根据粒度,单机版:单任务版每个节 ...

Go编译过程

一、 Go编译流程 二、过程说明 1. 词法解析 读取Go源文件,将字符序列转换为符号(token)序列,比如将“:=”转换为_Define 代码中的标识符、关键字、运算符和分隔符等字符串都将转化为对应的符号 2. 语法解析 根据Go语言规范对符号化的Go源文件进行解析,识别可能出现的语法错误,比如 ...

123···13>