Go语言中文网

其他

超干货!彻底搞懂Golang内存管理和垃圾回收

gcDrainIdle|gcDrainUntilPreempt|gcDrainFlushBgCredit)
2022年9月23日
其他

Go:你之前的基准测试可能是错的。

今天给大家带来一篇关于基准测试的文章。一般来说,我们永远不应该猜测性能。在编写优化时,可能会有很多因素发挥作用,即使我们对结果有强烈的看法,测试它们也不是一个坏主意。然而,编写基准测试并不简单。编写不准确的基准并基于它们做出错误的假设非常简单。这篇文章的目的是检查导致不准确的四个常见和具体的陷阱:不重置或暂停计时器对微基准做出错误假设不留意编译器优化被观察者效应愚弄概念在讨论这些陷阱之前,让我们简要回顾一下基准测试在
2022年9月22日
其他

全面解读!Golang中泛型的使用

}}我们仔细看下这个自定义类型约束的写法,你会发现,它用的是interface的写法。这个写法在go1.18之前的语法中,是来申明一个接口类型的。比如,我们熟知的这个Error的例子:type
2022年9月16日
其他

你信吗?Go 泛型竟然已经被迅速采用

支持或运营人员。从这个角度看,理想的文档服务器应该是那种交钥匙解决方案,或者至少不会带来过多的额外工作负担(一个人在午休时间就能维护好)。考虑到目前开发人才严重短缺的现实,这样的要求完全在情理之中。
2022年9月13日
其他

万字长文告诉你Go 1.19中值得关注的几个变化

Programs》[11]的论文说起。在这篇文章中,Lamport给出了多处理器计算机在共享内存的情况下并发程序正确运行的条件,即多处理器要满足**顺序一致性(sequentially
2022年9月10日
其他

Go 生态:Prometheus的四种指标类型,我终于搞懂了

指标是用来衡量性能、消耗、效率和许多其他软件属性随时间的变化趋势。它们允许工程师通过警报和仪表盘来监控一系列测量值的演变(如CPU或内存使用量、请求持续时间、延迟等)。指标在IT监控领域有着悠久的历史,并被工程师广泛使用,与日志和链路追踪一起被用来检测系统是否有不符合预期的表现。在其最基本的形式中,一个指标数据点是由以下三个部分构成:一个指标名称收集该数据点的时间戳一个由数字表示的测量值在过去的十年里,随着系统变得越来越复杂,出现了维度度量的概念,也就是说,度量还包括一组标签或标识(即维度),以提供额外的上下文。支持维度指标的监控系统允许工程师通过查询特定的指标名称,并通过标签进行过滤和分组,从而轻易地在多个组件和维度上汇总和分析一个指标。对于由许多组件组成的现代动态系统,云原生基金会(CNCF)中的项目Prometheus已经成为最受欢迎的开源监控软件,并有效地成为指标监控的行业标准。Prometheus定义了一个度量说明格式和一个远程写入协议,社区和许多供应商都采用这个协议来说明和收集度量成为事实上的标准。OpenMetrics是另一个CNCF项目,它建立在Prometheus导出格式的基础上,为收集度量标准提供了一个与厂商无关的标准化模型,旨在成为互联网工程任务组(IEFT)的一部分。最近,另一个CNCF项目OpenTelemetry出现了,它的目标是提供一个新的标准,能够统一指标、链路跟踪和日志的收集,使跨领域的遥测信号收集和关联更容易。由于有几个不同的选择,你可能想知道哪个标准最适合你。为了帮助你回答这个问题,我们准备了一个由三部分组成的Blog系列,其中我们将深入研究由CNCF主持的指标标准。在第一篇博文中,我们将介绍Prometheus指标标准;在下一篇博文中,我们将回顾OpenTelemetry指标标准;在最后一篇博文中,我们将直接比较这两种格式,为更好的互操作性提供一些建议。我们希望你在读完这些文章后,你能理解每个标准之间的差异,这样你就能决定哪一个能更好地满足你当前(和未来)的需求。—
2022年9月9日
其他

码住!Golang并发安全与引用传递总结

m.Load(1)fmt.Println(val1.(int))fmt.Println(val2.(bool))//遍历m.Range(func(key,
2022年9月8日
其他

Go 1.19.1 发布了:看看要不要升级!!!

了!!福利我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号
2022年9月7日
其他

TIOBE 9 月编程语言排行榜:Go 快进入前 10 了!!

编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于全球技术工程师、课程和第三方供应商的数量,其中包括了流行的搜索引擎以及技术社区,如
2022年9月6日
其他

Go语言爱好者周刊:第 158 期 — 正确率竟然才 18%。。。

https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
2022年9月4日
其他

Visual Studio Code 1.71 发布

推荐阅读图文结合!Redis延迟队列golang高效实践福利我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号
2022年9月3日
其他

图文结合!Redis延迟队列golang高效实践

N为有序集的基数,而M为被移除成员的数量。在熟悉了基于redis实现的延迟队列的基本方法后,接下来看下使用golang具体的实现。五、消息协议定义定义一个消息结构来保存消息://
2022年9月2日
其他

Go:熔断原理分析与源码解读

1))通过修改算法中的K(倍值),可以调节熔断器的敏感度,当降低该倍值会使自适应熔断算法更敏感,当增加该倍值会使得自适应熔断算法降低敏感度,举例来说,假设将调用方的请求上限从
2022年9月1日
自由知乎 自由微博
其他

Go 每日一库之一个让终端内容彩色化的工具:Color

在命令行的文本输出中,你经常见到的是不是都是黑色背景,白色文字。今天给大家推荐一款能让输出的文本带上颜色的工具:colorcolor工具能够使终端上的输出按不同的颜色输出。先看下效果图:该工具不仅可以让内容按不同颜色输出,还可以给内容加上粗体、斜体、下划线的样式。同时还可以给美容加上背景颜色。下面我们看下具体的使用。首先,通过go
2022年8月31日
其他

必撸系列!Go另外几个黑魔法技巧汇总

RETURN_VALUE这里,我们定义了一个简单的add函数,并通过dis模块来查看add函数对应的字节码。Python虚拟机是一个典型的栈机,其字节码执行都是基于栈来执行的,以add为例:0
2022年8月30日
其他

3种方式!Go Error处理最佳实践

Handling(一)一个常见的三层调用在工程实践中,以一个常见的三层架构(dao->service->controller)为例,我们常见的错误处理方式大致如下://
2022年8月29日
其他

Go语言爱好者周刊:第 157 期 — 正式发布了

https://github.com/golang/go/commit/cf26fbb1f6d9644f447342f42d2dddcbe9ceda61[9]Kubernetes
2022年8月28日
其他

看Go中的struct如何被优化,还有小插曲

想必大家在coding的时候,很少对struct中的字段的字节对齐关注,今天带大家来看一下字节对齐在我们项目编码中的一些影响。struct中的字段顺序以下面的结构为例,咱们看看下面的结构体:package
2022年8月26日
其他

Rust 与 Go 可以互操作?

https://metalbear.co/blog/mirrord-internals-hooking-libc-functions-in-rust-and-fixing-bugs/[2]Go
2022年8月25日
其他

贝壳Go实现的多云对接存储网关建设

1、功能介绍贝壳存储服务通过S3协议向业务方提供文件、图片、音视频的存储及下载。S3协议由AWS推出,在对象存储行业已经成为事实标准。腾讯云对象存储COS、阿里云对象存储OSS均兼容S3协议。S3协议可以简单理解为一套webapi接口。通过调用接口,业务方可以进行对象数据的存取。每一个对象数据称为一个object,以一个唯一的ID来标识,object可以组织到一个bucket中,便于区分不同的业务场景。总结来说,S3就是一个用bucket组织数据,可以存储近似无限数量object的key-value(其中key为object的标识,value为存储的数据内容)存储系统。从业务角度来说,数据需要做一些处理之后才会使用。以图片为例,业务方存储一张原图之后,实际使用时可能并不需要原图,而是根据场景进行缩放或者打水印或者格式转换之后下载使用,而且C端场景需要提高下载速度,就近下载。因此贝壳存储服务也提供了多媒体预处理以及通过CDN就近下载的功能。贝壳存储服务稳定性可以达到4个9,存储近百亿数据,总数据量十PB级。2、背景存储网关作为一个底层服务,牵一发而动全身,其稳定性至关重要,初始存储网关架构如下图所示:业务方通过S3协议上传数据到存储网关,存储网关进行验签、鉴权、文件大小及黑白名单检测之后转发到后端使用的云平台对象存储服务。作为一个存储网关,有如下两种关于大小的设置:单对象最大大小,如果超出该限制,则拒绝传输。类似nginx
2022年8月24日
其他

Go:负载均衡原理分析与源码解读

上一篇文章一起学习了Resolver的原理和源码分析,本篇继续和大家一起学习下和Resolver关系密切的Balancer的相关内容。这里说的负载均衡主要指数据中心内的负载均衡,即RPC间的负载均衡。传送门
2022年8月23日
其他

Go语言从0到1实现最简单的数据库!

和“VM”(虚拟机)(一)prepareStatement为最简单的解析器“SQL编译器”当前改解析器,最简单到还没有识别出SQL语句,只是写死识别两个单词的SQL语句:func
2022年8月22日
其他

Go语言爱好者周刊:第 156 期 — 别踩这个坑

https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
2022年8月21日
其他

Consul 1.13 正式发布,包括这些重大更新

联合模型中的一些限制:依赖与主数据中心的连接。假设整个联邦的资源相同。难以支持复杂的中心辐射型拓扑。使用集群对等单独的管理边界通过集群对等,每个集群都是自治的,拥有自己的密钥、目录和访问控制列表
2022年8月20日
其他

来了!Go的2个黑魔法技巧

}}测试成功,__u32toa_small函数不仅成功运行,而且通过了测试。最后,我们来做一个性能跑分看看__u32toa_small和strconv.Itoa之间的性能差异:func
2022年8月19日
其他

Go:服务发现原理分析与源码解读

在微服务架构中,有许多绕不开的技术话题。比如服务发现、负载均衡、指标监控、链路追踪,以及服务治理相关的超时控制、熔断、降级、限流等,还有RPC框架。这些都是微服务架构的基础,只有打牢这些基础,才敢说对微服务是有了一点理解,出门也好意思和别人打招呼了,被人提问的时候也能侃侃而谈了,线上出了问题往往也能寻根溯源内心不慌了,旁边的女同事小芳看着你的时候也是满眼的小可爱了。在《微服务实践》公众号,之前写了《go-zero微服务实战系列》的系列文章,这个系列的文章更多的是偏向业务功能和高并发下的服务优化等。本人水平有限,难免有写的不足的地方,但也依然得到了大家的支持与鼓励,倍感荣幸,所以决定趁热打铁,乘胜追击,继续给大家输出干货。《彻底搞懂系列》会基于
2022年8月18日
其他

gomonkey用户如何对泛型打桩

...等,这会导致虽然打桩当时成功了,但后续再实例化泛型函数的时候,对应的函数调用名称就变成了其他的,所以打桩没有真正生效,比如打桩打在了func2上,而之后的调用却发生在func3,
2022年8月17日
其他

作为Gopher,你知道Go的注释即文档应该怎么写吗?

struct{}这三个类型在pkgsite页面上的展示效果是这样的:但是,请读者注意,按照Go官方的推荐,代码注释的第一个单词,应该是被注释的内容本身。比如前文中,SomeTypeA的注释应该是//
2022年8月16日
其他

Go:五分钟给你的 gRPC 服务加上 HTTP 接口

00-ad5b7df7a834a1c05ee64999e3310811-195ba1f4f9956cc4-00Date:
2022年8月15日
其他

7 年后,发现用 Go 实现 CockroachDB 是正确的选择

相比,我们欣赏自动内存管理以及完成某事的方法很少不止一种,例如使用静态和一次性初始化程序。我们很好地利用了通道进行同步,尽管我们会注意到有效地使用它们是有技巧的。当时,还有待观察的是所有这些
2022年8月3日
其他

关于Go并发编程,你不得不知的“左膀右臂”——并发与通道!

*sudog}waitq中连接的是一个sudog双向链表,保存的是等待中的Goroutine。(一)创建chan使用make关键字来创建管道,make(chan
2022年8月1日
其他

GoLand 2022.2 正式发布

的尝试支持。。。。完整的发布说明见:https://www.jetbrains.com/zh-cn/go/whatsnew/。文末阅读原文可以直达完整介绍。推荐阅读Go每日一库之一个好玩的
2022年7月30日
其他

Go每日一库之一个好玩的 Go 语言 REPL 工具

是可以加路径的。也有可能我使用的姿势不对,有知道的可以指点一二😀多行输入有点反直觉。如果我没有输入完整的代码,它会一直等着我输入。可是我已经不想输入了。有一次我键入
2022年7月29日
其他

Go 每日一库之 roaring

}}与很多编程语言支持的迭代器一样,先调用对象的Iterator()返回一个迭代器,然后循环调用HasNext()检查是否有下一个元素,调用i.Next()返回下一个元素。上面代码依次输出
2022年7月21日
其他

Go 每日一库之 bitset

指令原生支持、速度快。基于位运算的位集合在有限的场景中替换集合数据结构可以收到意想不到的效果。bitset库实现了位集合及相关操作,不妨拿来即用。安装本文代码使用
2022年7月18日
其他

Go 每日一库之 hystrix-go

理想情况下,这儿的逻辑可以使应用程序优雅地处理不可用的外部服务。当代码返回一个错误时,或者当它基于各种健康检查[5]无法完成时,就会触发此事件。hystrix.Go("my_command",
2022年7月6日
其他

揭秘!用标准Go语言能写脚本吗?

和PHP开发者来说非常有吸引力。作为编译型语言的特性,也让Go在多协程环境下的性能有不俗的表现。但脚本语言则几乎都是解释型语言,那么Go怎么就和脚本扯上关系了?请读者带着这个疑问,“听”
2022年7月4日
其他

gRPC如何在Golang和PHP中进行实战?7步教你上手!

grpc下载gRPC源码,这一步是为了生成php的proto生成器,可以给我们生成client服务代码,当然你也可以自己去写代码,不用这个生成器。但是对于新手,我建议你下载安装。git
2022年7月2日
其他

Golang原生json可以一库走天下吗?

jsonvalue.NewObject()v.SetString("中国").At("nation")fmt.Println(v.MustMarshalString())//
2022年6月30日
其他

Go 每日一库:gomonkey 是什么?

小土跟作者晓龙老师也认识许久,今天转载老师一篇关于gomonkey用法的文章。也容许我在这里给大家介绍一下晓龙老师。如对文章有看法也欢迎大家在留言区进行交流与讨论。晓龙老师来自中兴通讯,敏捷技术教练,2020年和2021年公司十佳教练,Go语言知名打桩框架gomonkey作者,具有十多年软件架构和开发经验。近年来专注于PaaS和5G等大型平台软件的设计与开发,尤其对于TDD、
2022年6月24日
其他

Golang可重入锁的实现

项目中遇到了可重入锁的需求和实现,具体记录下。为什么需要可重入锁我们平时说的分布式锁,一般指的是在不同服务器上的多个线程中,只有一个线程能抢到一个锁,从而执行一个任务。而我们使用锁就是保证一个任务只能由一个线程来完成。所以我们一般是使用这样的三段式逻辑:Lock();DoJob();Unlock();但是由于我们的系统都是分布式的,这个锁一般不会只放在某个进程中,我们会借用第三方存储,比如
2022年6月23日
其他

golang:快来抓住内存泄漏的“真凶”!

send这种阻塞了很长时间的case,“这不就找到问题了吗?就这?嗯?就这?”,赶紧找到对应的函数,发现之前的同学写了类似这样的代码:func
2022年6月7日
其他

Go 官方调查变频繁了:6 月份开启新的调查,参与下吧

日开放):https://google.qualtrics.com/jfe/form/SV_7O3x4IZKiUn0QCO?s=b推荐阅读简化
2022年6月6日
其他

为什么会有atomic.LoadInt32

https://github.com/golang/go/tree/master/src/sync/atomic[5]runtime/internal/atomic:
2022年6月6日
其他

简化 Go 中对 JSON 的处理

https://alanstorm.com/simplified-json-handling-in-go/作者:Alan[12]译者:lxbwolf[13]校对:polaris[14]本文由
2022年6月4日
其他

某些情况下,合理使用Go指针将大大提升程序的运行效率

}}请注意该缺陷可能在未来的编译器版本中被修补。同时请注意,如果这三个函数实现可以内联,那么基准测试结果将产生很大变化。这就是为什么这里使用
2022年6月3日
其他

Go 1.18.3 发布

点击上方蓝色“Go语言中文网”关注,每天一起学
2022年6月2日
其他

从项目的一个 panic 说起:Go 中 Sync 包的分析应用

Mutex、RWmutex、WaitGroup、Map、Once、Cond、Pool、PoolQueue等同步原语。下面我们会逐个分析其作用及使用注意事项(选用了一些
2022年6月1日
其他

2022 年值得学习的 Golang 包

做数据统计,一定看看该包。比如中位数、平均数、方差等。仓库地址:https://github.com/montanaflynn/stats。Pixel这是一个
2022年5月31日
其他

用Go重写Node.js服务:项目性能提升5倍,内存减少40%

容量非常有限,因为我们想对这两种服务施加压力并看看它们在压力下的表现如何所以,我们感兴趣的不是数字,而是两个版本之间的差异。”测试结果表明,Hasura
2022年5月30日