Go
文章平均质量分 93
戚银
一枚有点想法,喜技术,爱钻研的码农。
展开
-
【Go】四舍五入在go语言中为何如此困难
四舍五入是一个非常常见的功能,在流行语言标准库中往往存在 Round 的功能,它最少支持常用的 Round half up 算法。而在 Go 语言中这似乎成为了难题,在 stackoverflow 上搜索 [go] Round 会存在大量相关提问,Go 1.10 开始才出现 math.Round 的身影,本以为 Round 的疑问就此结束,但是一看函数注释 Round returns the nearest integer, rounding half away from zero ,这是并不常用的 Ro原创 2021-01-02 14:52:10 · 550 阅读 · 0 评论 -
【Go】我与sync.Once的爱恨纠缠
原文链接: https://blog.thinkeridea.com/202101/go/exsync/once.html官方描述 Once is an object that will perform exactly one action, 即 Once 是一个对象,它提供了保证某个动作只被执行一次功能,最典型的场景就是单例模式,Once 可用于任何符合 “exactly once” 语义的场景。sync.Once 的用法在多数情况下,sync.Once 被用于控制变量的初始化,这个变量的读写通常遵原创 2021-01-01 20:41:13 · 265 阅读 · 0 评论 -
【Go】高效截取字符串的一些思考
原文链接:https://blog.thinkeridea.com/201910/go/efficient_string_truncation.html最近我在 Go Forum 中发现了 [SOLVED] String size of 20 character 的问题,“hollowaykeanho” 给出了相关的答案,而我从中发现了截取字符串的方案并非最理想的方法,因此做了一系列实验并获得高...原创 2019-10-31 08:48:06 · 517 阅读 · 0 评论 -
【Go】类似csv的数据日志组件设计
原文链接:https://blog.thinkeridea.com/201907/go/csv_like_data_logs.html我们业务每天需要记录大量的日志数据,且这些数据十分重要,它们是公司收入结算的主要依据,也是数据分析部门主要得数据源,针对这么重要的日志,且高频率的日志,我们需要一个高性能且安全的日志组件,能保证每行日志格式完整性,我们设计了一个类 csv 的日志拼接组件,它的代码...原创 2019-07-20 22:39:40 · 233 阅读 · 0 评论 -
【Go】使用压缩文件优化io (一)
原文连接:https://blog.thinkeridea.com/201906/go/compress_file_io_optimization1.html最近遇到一个日志备份 io 过高的问题,业务日志每十分钟备份一次,本来是用 Python 写一个根据规则扫描备份日志问题不大,但是随着业务越来越多,单机上的日志文件越来越大,文件数量也越来越多,导致每每备份的瞬间 io 阻塞严重, CPU ...原创 2019-06-30 22:26:31 · 523 阅读 · 0 评论 -
【Go】使用压缩文件优化io (二)
原文链接: https://blog.thinkeridea.com/201907/go/compress_file_io_optimization2.html上一篇文章《使用压缩文件优化io (一)》中记录了日志备份 io 优化方案,使用文件流数据压缩方案优化 io 性能,效果十分显著。这篇文章记录数据分析前置清洗、格式化数据的 io 优化方案,我们有一台专用的日志前置处理服务器,所有业务日志...原创 2019-07-09 18:46:35 · 380 阅读 · 0 评论 -
【Go】获取用户真实的ip地址
原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip 非常困难,大多数的框架及工具库都会封装各种获取用户真实 ip 的方法,在 exnet 包中也封装了各种 ip 相关的操作,其中就包含获取客户端 ip 的方法,比较实用的方法如下:func Cl...原创 2019-03-28 08:34:21 · 4342 阅读 · 0 评论 -
【Go】那么多数值类型,应该选哪个?
原文链接:https://blog.thinkeridea.com/201903/go/selection_of_numerical_types.htmlGo 内置很多种数值类型,往往初学者不知道编写程序如何选择,使用哪种数值类型更有优势。内置的数值类型有:uint8、 uint16、 uint32、 uint64、 uint、 int8、 int16、 int32、 int64、 int。...原创 2019-03-19 08:46:41 · 188 阅读 · 0 评论 -
【Go】go get 自动代理
原文链接:https://blog.thinkeridea.com/201903/go/go_get_proxy.html最近发现技术交流群里很多人在询问 go get 墙外包失败的问题,大家给了很多解决方案:从 Github 的代码库 clone设置 GOPROXY 环境变量配置代理, 例如:GOPROXY=https://goproxy.io配置命令行代理,https_proxy 环...原创 2019-03-22 08:06:07 · 1147 阅读 · 0 评论 -
【Go】IP地址转换:数字与字符串之间高效转换
转载:https://blog.thinkeridea.com/201903/go/ip2long.htmlIP 地址库中 IP 地址的保存格式一般有两种,一种是点分十进制形式(192.168.1.1),另一种是数字形式(3232235777),应用中,经常需要在这两种格式之间做转换。针对这一个问题我在 exnet 扩展包里面实现可两者的转换的快捷方法:func IP2Long(ip ne...原创 2019-03-25 08:38:04 · 3498 阅读 · 0 评论 -
【Go】string 优化误区及建议
原文链接:https://blog.thinkeridea.com/201902/go/string_ye_shi_yin_yong_lei_xing.html初学 Go 语言的朋友总会在传 []byte 和 string 之间有着很多纠结,实际上是没有了解 string 与 slice 的本质,而且读了一些程序源码,也发现很多与之相关的问题,下面类似的代码估计很多初学者都写过,也充分说明了作者...原创 2019-02-24 07:49:16 · 481 阅读 · 0 评论 -
【Go】strings.Replace 与 bytes.Replace 调优
原文链接:https://blog.thinkeridea.com/201902/go/replcae_you_hua.html标准库中函数大多数情况下更通用,性能并非最好的,还是不能过于迷信标准库,最近又有了新发现,strings.Replace 这个函数自身的效率已经很好了,但是在特定情况下效率并不是最好的,分享一下我如何优化的吧。我的服务中有部分代码使用 strings.Replace ...原创 2019-02-03 13:22:02 · 955 阅读 · 0 评论 -
【Go】优雅的读取http请求或响应的数据-续
原文链接:https://blog.thinkeridea.com/201902/go/you_ya_de_du_qu_http_qing_qiu_huo_xiang_ying_de_shu_ju_2.html之前发布 【Go】优雅的读取http请求或响应的数据 文章,网友 “wxe” 咨询:“优化前后的请求耗时变化有多大”,之前只分析了内存分配,这篇文章用单元测试的方式分析优化前后的耗时情况,...原创 2019-02-01 21:11:50 · 976 阅读 · 0 评论 -
Go】优雅的读取http请求或响应的数据
原文链接:https://blog.thinkeridea.com/201901/go/you_ya_de_du_qu_http_qing_qiu_huo_xiang_ying_de_shu_ju.html从 http.Request.Body 或 http.Response.Body 中读取数据方法或许很多,标准库中大多数使用 ioutil.ReadAll 方法一次读取所有数据,如果是 jso...原创 2019-01-26 20:21:33 · 10161 阅读 · 0 评论 -
【Go】slice的一些使用技巧
原文链接:https://blog.thinkeridea.com/201901/go/slice_de_yi_xie_shi_yong_ji_qiao.htmlslice 是 Go 语言十分重要的数据类型,它承载着很多使命,从语言层面来看是 Go 语言的内置数据类型,从数据结构来看是动态长度的顺序链表,由于 Go 不能直接操作内存(通过系统调用可以实现,但是语言本身并不支持),往往 slice...原创 2019-01-24 22:53:10 · 373 阅读 · 0 评论 -
【Go】深入剖析slice和array
array 和 slice 看似相似,却有着极大的不同,但他们之间还有着千次万缕的联系 slice 是引用类型、是 array 的引用,相当于动态数组,这些都是 slice 的特性,但是 slice 底层如何表现,内存中是如何分配的,特别是在程序中大量使用 slice 的情况下,怎样可以高效使用 slice?今天借助 Go 的 unsafe 包来探索 array 和 slice 的各种奥妙。...原创 2019-01-13 21:58:27 · 452 阅读 · 0 评论 -
一次读锁重入导致的死锁故障
在两天前第一次遇到自己的程序出现死锁, 我一直非常的小心使用锁,了解死锁导致的各种可能性,这次的经历让我未来会更加小心,下面来回顾一下死锁发生的过程与代码演进的过程吧。简述业务背景及代码演进过程我的程序中有一块缓存,数据会组织好放到内存中,会根据数据源(MySQL)更新而刷新缓存,是读多写少的应用场景。内存中有一个很大数据列表,缓存模块会按数据维度进行分组,每次访问根据维度查找到这个列表里...原创 2018-12-26 08:26:18 · 1085 阅读 · 0 评论