自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Go中国

Golang语言相关的资讯推送。

  • 博客(1210)
  • 收藏
  • 关注

转载 使用Go语言实现 pping

大家好,我是鸟窝。在前一篇pping: 被动式ping,计算网络时延中,我给大家介绍了 pping 这个工具的原理和使用方法。这篇文章中,我将使用 Go 语言实现 pping 工具。通过这篇文章,你将了解到:如何使用 gopacket 来捕获和解析网络数据包如何设置捕获时长和过滤捕获的数据包如何在 CGO 下静态编译库,如 libpcap了解 TCP/IP 协议栈的基本知识,如 TCP Optio...

2024-05-21 13:36:00 2

转载 Cloudflare最佳实践:如何通过 Go PGO 回收 CPU

Golang 1.20 在 go 编译器引入了对配置文件引导优化 (PGO) 的支持。这允许指导编译器根据系统的真实行为引入优化。在 Cloudflare 的可观察性团队中,我们维护着一些基于 Go 的服务,这些服务在全球范围内使用数千个内核,因此,即使宣传的节省 2-7%,也能大幅减少我们的 CPU 占用空间,而且实际上是免费的。这将减少我们内部服务的 CPU 使用率,释放这些资源来满足客户请求...

2024-05-16 17:53:48 7

转载 Gopher的Rust第一课:建立Rust开发环境

经过上一章的对Rust诞生演化的了解以及设计哲学的探讨后,如果你依然决定继续Rust编程学习之旅,那么欢迎你和我一起正式走进Rust学习和实践的课堂。编程不是“纸上谈兵”,它是一门实践的艺术。编程语言的学习离不开动手实践,因此学习任何一门编程语言的第一步都是要拥有一个这门编程语言的开发环境,这样我们才可以动手编码,理论与实践结合,不仅加速学习效率,还能取得更好的学习效果。在这一章中我们就先来学习下...

2024-05-15 08:00:45 6

转载 使用Ollama和Go基于文本嵌入模型实现文本向量化

基于RAG+大模型的应用已经成为当前AI应用领域的一个热门方向。RAG(Retrieval-Augmented Generation)将检索和生成两个步骤相结合,利用外部知识库来增强生成模型的能力(如下图来自网络)。在RAG赋能的大模型应用中,关键的一步是将文本数据向量化后存储在向量数据库中(如上图的红框),以实现快速的相似度搜索,从而检索与输入查询相关的文本片段,再将检索到的文本输入给生成模型生...

2024-05-13 13:12:05 10

转载 Go未用代码消除与可执行文件瘦身

在日常编写Go代码时,我们会编写很多包,也会在编写的包中引入了各种依赖包。在大型Go工程中,这些直接依赖和间接依赖的包数目可能会有几十个甚至上百个。依赖包有大有小,但通常我们不会使用到依赖包中的所有导出函数或类型方法。这时Go初学者就会有一个疑问:这些直接依赖包和间接依赖包中的所有代码是否会进入到最终的可执行文件中呢?即便我们只是使用了某个依赖包中的一个导出函数。这里先给出结论:不会!在这篇文章中...

2024-05-08 13:01:03 11

转载 Go 1.22 的新增功能系列之三:slices.Concat

我们正在准备 Go 1.22 的第二个候选版本,它应该很快就会发布。在我的上一篇博文中,我写了关于 Go 1.22 的reflect.TypeFor的工作。这次,我将写一下我是如何提出和实现 slices.Concat 的。这是slices.Concat的签名:// Concat returns a new slice concatenating the passed in slices....

2024-05-06 19:16:32 18

转载 6 个必须尝试的将代码转换为引人注目的图表的工具

以易于理解的方式解释复杂的事情很重要。作为开发人员,我们花费大量时间处理代码,试图向我们的团队、老板或客户解释棘手的部分。但对于不懂技术的人来说,仅仅向他们展示原始代码可能会很困难。这就是图片(如图表)可以提供很大帮助的地方。幸运的是,由于我们拥有所有很酷的技术,有很多工具可以将代码转换成易于理解的图片。这些工具不仅让事情变得更加清晰,还帮助团队更好地合作。无论您是专业编码员还是新手,使用这些工具...

2024-05-05 10:03:42 17

转载 Go Heap Profile 怎么了?

Go heap profile 是常常用来检查内存泄露和内存占用大问题的问题的手段,而且非常常用。而且,我们也经常创建两个间隔较长的 heap profile, 获取它们的差值来方便查看内存泄露: Hi, 使用多年的 go pprof 检查内存泄漏的方法居然是错的?! [1]今天,度厂的一位同学提出了一个很有意思的案例,让我们对 heap profile 有了更深的理解。问题: heap prof...

2024-04-30 12:53:59 15

转载 Go 1.22 的新增功能系列之二:reflect.TypeFor

Go 1.22 的第一个候选版本已经发布,这意味着最终版本即将发布,现在是我在博客中介绍我在这个周期中所做工作的时候了。像往常一样,我的贡献很小,但它们是我的,所以我将从幕后的角度来谈谈它们。首先是reflect.TypeFor。这是整个函数:// TypeFor returns the [Type] that represents the type argument T.func TypeFo...

2024-04-28 09:48:51 13

转载 Go早期是如何在Google内部发展起来的

2007年Go诞生于Google,2009年Google正式对外宣布了Go语言的开源!时至今日,距离Go开源已经过去了近15个年头了[1]!Go在Google公司内部究竟是怎样的一个状态呢?前Google员工Yves Junqueira近期撰文从其个人所见所闻谈了Go在Google的历程[2]!这里简单翻译,供大家参考!最近,Jeremy Mason[3]和Sameer Ajmani[4]撰写了有...

2024-04-26 08:01:13 10

转载 Go 1.22 的新增功能系列之一:cmp.Or

截至撰写本文时,Go 1.22 已经发布几个月了。早就该结束我为 1.22 所做的工作的系列了。抱歉耽搁了这么久,我最近忙于生活事务。如果您错过了我关于reflect.TypeFor(https://blog.carlana.net/post/2024/golang-reflect-type-for/) 和slices.Concat(https://blog.carlana.net/post/20...

2024-04-25 17:16:10 32

转载 使用 GitHub Actions 构建 Golang PGO

今年 2 月,我宣布 Dolt 版本现已构建为配置文件引导优化 (pgo) 二进制文件,利用 Golang1.20的强大功能将 Dolt 的读取性能提高 5.3%。在我宣布这一消息之前,我们的一位常驻 Golang 专家 Zach 试验并测试了 Golang 的 pgo 功能,并写下了他在使用 Dolt 构建后观察到的性能提升,该配置文件首先针对 Dolt 运行我们的 Sysbench 基准测...

2024-04-24 19:53:47 24

转载 选择正确的Go Module Path

最近我在查看项目代码时,注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法,相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为module path,但这显然不是Go的推荐写法或惯用法。在这篇简短的文章中,我就来介绍一下module path对Go源码构建、包导入路径以及开发协...

2024-04-23 17:00:38 12

转载 充分利用每个字节:Go 的内存打包秘密揭晓!

Go 以其简单的设计而闻名,受到云原生应用程序的青睐。它拥有独特的天赋和特殊功能,由于其幕后的工程奇迹,常常使天平偏向偏袒。为什么要讨论结构中的填充?在快节奏的软件开发世界中,生成式人工智能可以在几分钟内生成文章,因此深入研究人工智能可能掩盖的主题至关重要。本博客旨在阐明 Go 的一个看似小众但关键的方面——结构填充。这个聪明的功能可以非常有效地优化内存使用,以至于它可能会为考虑转换的 Java ...

2024-04-19 12:03:50 16

转载 Go 从版本 1.0 到 1.22的性能变化

两年前,我在 1.2 到 1.18 的所有 Go 版本上比较了 GoAWK 解释器的两个不同基准。在本文中,我重新运行这些基准测试,添加缺少的 Go 版本(1.0 和 1.1)以及新版本(1.19 到 1.22)。我还包含了 Go 1.20 中添加的配置文件引导优化 (PGO) 的结果。我将引用我原来文章中的一些内容,这样您就不必重新阅读旧文章来理解设置。用 Go 编写的程序可以通过多种方式变得更...

2024-04-18 09:40:47 28

转载 Go 开发者调查 2024 年结果(AI相关)

背景这篇文章分享了我们在 2024 年 1 月和 2 月进行的最新 Go 开发者调查的结果。除了捕捉有关使用 Go 和 Go 工具的观点和挑战之外,我们本次调查的主要关注领域是开发者如何开始使用 Go(或其他语言)的 AI 相关用例,以及那些正在学习 Go 或希望扩展 Go 技能集的人面临的特殊挑战。我们从 Go 博客以及 VS Code Go 插件中的随机提示招募参与者。今年,在 JetBrai...

2024-04-17 18:30:00 20

转载 Go Tips #001 一行代码测量函数的执行时间

“Golang Tips 是翻译的 Phuong Le @func25[1] 陆陆续续的发表的推文,目前已经发表 70+了。我征得 Phuong Le 的同意后,会逐步把这些推翻翻译过来,发布到公众号上。因为是推文,可能原作者的内容比较简单,比如第一个 tip 就一张图片,我会相应的进行扩充,丰富其内容。后续也会在 github 建立一个项目,大家都可以参与进行翻译。我们可以通过 defer,实现...

2024-04-15 17:01:14 15

转载 Goroutine调度器揭秘

你以前可能听说过 Goroutine 调度器,但你对它的工作原理了解多少?它如何将 goroutine 与线程配对?不用着急理解上面的图像,因为我们要从最基本的开始。goroutine 被分配到线程中运行,这由 goroutine 调度器在后台处理。根据我们之前的讨论,我们了解到以下关于 goroutine 的几点:就原始执行速度而言,goroutine 并不一定比线程更快,因为它们需要在实际线程...

2024-04-11 08:01:21 16

转载 【Go】透彻理解 Context

使用 Go 开发后台服务程序,经常会用到上下文 (context.Context)。这是因为远程服务调用,往往会受网络环境等因素的影响,产生耗时长、丢包无返回等异常状况。因此,无论是我们自身提供的服务,还是调用下游的服务,都需要在一定的时间内有完成或取消,并释放资源。很多人有用了 context.Context,但是对于其具体的功能或者原理不甚清楚,甚至觉着这是个比较复杂的东西。实际上,Conte...

2024-04-08 08:00:46 25

转载 Go 1.22引入的包级变量初始化次序问题

细心的朋友可能已经注意到,从春节后,我的博客就“停更”了!实际上,这一情况部分是因为工作上的事务繁忙,另一部分则是因为我将工作之外的闲暇时间更多地投入到一本即将于今年中下旬出版的书的撰写了:在之前的积累基础上,我花了两个多月的时间完成了初稿。当然,我也深切地怀念博客写作所带来的乐趣和与读者的互动。正巧,今天一位学员在《Go语言第一课》专栏[1]留言给了我一个恢复下笔的机会。借此,我也准备恢复一下博...

2024-04-04 08:30:34 25

转载 探索Kubernetes v1.30:激动人心的新功能和升级!

兴奋不?我们不都是吗?Kubernetes v1.30 版本带来了一系列令人期待的更新,包括动态资源分配(DRA)的结构化参数和节点交换内存SWAP支持的改进。动态资源分配的结构化参数增加了资源管理的透明度和效率,而节点交换内存的改进则提高了系统稳定性。现在让我们探讨一下将 Kubernetes 1.30 提升到新版本的主要功能。Kubernetes v1.30 的主要变化1. 动态资源分配(...

2024-04-02 08:01:10 142

转载 修复go tool pprof存在的“bug”

问题源起之前写了一段根据当前内存占用,获取pprof指标文件的代码,如下:packagemainimport("fmt""os""runtime""runtime/pprof""strconv""time")funcmain(){ticker:=time.NewTicker(10*time.Second)gofunc(){fo...

2024-03-29 08:00:16 32

转载 2024 Gopher Meetup 武汉站活动

微派网络与 GoCN 社区联合举办GopherMeetup一起来看看武汉站活动的精彩瞬间吧2024年3月23日,微派网络与国内领先的Go开发者社区GoCN携手共同举办一场技术盛宴——2024 Gopher Meetup 武汉站活动。Part1 活动背景作为国内最具规模和生命力的Go开发者社区,GoCN的线下meetup活动一直是Gopher们了解前沿发展、深度分享经验的重要平台。微派网络作为武汉...

2024-03-27 08:01:29 96

转载 更强大的Go执行跟踪能力

runtime/trace 包[1]包含了一个强大的工具,可用于理解和调试 Go 程序。该功能允许我们在一段时间内对每个 goroutine 的执行进行跟踪。使用go tool trace 命令[2](或优秀的开源工具gotraceui[3]),我们就可以可视化和探索这些跟踪数据。跟踪的魔力在于,它可以轻松揭示程序中一些通过其他方式很难发现的问题。例如,大量 goroutine 在同一个 chan...

2024-03-26 08:01:52 24

转载 go 中更加强大的 traces

原文地址:More powerful Go execution traces原文作者:Michael Knyszek本文永久链接:https://github.com/gocn/translator/blob/master/2024/w12_more_powerful_go_execution_traces.md译者:小超人Go 版本: 1.22+runtime/trace包包含一个用于理解并且排...

2024-03-22 08:01:35 37

转载 Go 中的高速数据包处理:从 net.Dial 到 AF_XDP

“推进 Go 的极限:从 net.Dial 到系统调用、AF_PACKET 和极速 AF_XDP。数据包发送性能的基准测试。最近,我编写了一个 Go 程序,向数百万个 IP 地址发送 ICMP ping 消息[1]。显然,我希望这个过程能尽可能快速高效地完成。因此,这促使我研究各种与网络栈交互和快速发送数据包的各种方法。这是一个有趣的旅程,所以在本文中,我将分享一些学习成果,并记录下来供将来参考:...

2024-03-20 08:04:09 90

转载 LeetCode Linked List 刷题模板

链表特点 图片来源: https://en.wikipedia.org/相较于数组,链表的特点如下:优点动态长度:链表的长度可以动态调整 (内存充足的情况下),不需要像数组预先指定大小内存无需连续:链表中的元素在内存中可以是不连续的,提升内存使用灵活性缺点随机访问低效:链表随机访问时,需要从头节点开始遍历,时间复杂度为 O(N)插入和删除操作低效:链表中插入和删除元素时,需要移动大量元素,时间复...

2024-03-18 08:01:07 27

转载 K8s蓝绿部署:优雅应对应用程序更新挑战

Kubernetes 是一个开源容器编排系统,可简化软件部署、扩展和管理。蓝绿部署是一种部署模式,通过同时运行两个相同的生产环境来最大限度地减少停机时间。通过创建蓝色和绿色部署,设置服务和路由规则,以及执行蓝绿部署来更新应用程序版本,可以轻松管理和更新应用程序。Kubernetes 是一个开源容器编排系统,可简化软件部署、扩展和管理。它最初由 Google 设计,现在由云原生计算基金会监管。蓝绿部...

2024-03-13 08:00:12 76

转载 《从慢速到SIMD》聊Go边界检查消除

在翻译的从慢速到 SIMD一文中, SourceGraph 工程师其中的一个优化就是边界检查消除(BCE,bounds check elimination)技术,同时他也抛给了读者一个问题:“为啥在使用 a[i:i+4:i+4] 而不是 a[i:i+4]?本文第一部分先回答这个问题。第二部分介绍更好的边界检查消除方法。第三部分再全面梳理 Go 的边界检查消除技术。为啥在使用 a[i:i+4:i+4...

2024-03-11 08:02:30 40

转载 滴滴基于 Clickhouse 构建新一代日志存储系统

ClickHouse 是2016年开源的用于实时数据分析的一款高性能列式分布式数据库,支持向量化计算引擎、多核并行计算、高压缩比等功能,在分析型数据库中单表查询速度是最快的。2020年开始在滴滴内部大规模地推广和应用,服务网约车和日志检索等核心平台和业务。本文主要介绍滴滴日志检索场景从 ES 迁移到 CK 的技术探索。背景此前,滴滴日志主要存储于 ES 中。然而,ES 的分词、倒排和正排等功能导致...

2024-03-06 09:01:46 50

转载 元老与新秀:Go sort.Search()和sort.Find()

sort.Search()sort.Search() 提交于遥远的2010年11月11日,提交者是Go三位创始人之一的Robert Griesemer[1], 随Go第一个正式版本一起发布从这个意义上说,是标准库元老级的函数了~sort.Search()[2] 用于在排序的切片或数组中查找元素//Searchusesbinarysearchtofindandreturnthes...

2024-03-04 08:01:07 49

转载 优化AI生命周期:k8s下大模型部署的新选择!

前言AI 商业化的时代,大模型推理训练会被更加广泛的使用。比较理性的看待大模型的话,一个大模型被训练出来后,无外乎两个结果,第一个就是这个大模型没用,那就没有后续了;另一个结果就是发现这个模型很有用,那么就会全世界的使用,这时候主要的使用都来自于推理,不论是 openAI 还是 midjourney,用户都是在为每一次推理行为付费。随着时间的推移,模型训练和模型推理的使用比重会是三七开,甚至二八开...

2024-02-29 08:03:35 431

转载 Kubernetes GC 设计与实现

概述 Kubernetes 和内置垃圾回收编程语言 (例如 Go, Java) 一样,内部也有垃圾回收机制,用于清理集群中的下列资源:终止的 Pod已完成的 Job附属的主对象已经不存在的对象未使用的容器和容器镜像StorageClass 回收策略为 Delete 的 PV 卷过期的证书签名...和编程语言中的 GC 运行机制一样,Kubernetes 中的垃圾回收周期自动执行,集群内每个运行 ...

2024-02-27 08:00:35 37

转载 Meetup武汉站议题揭晓~趁现在!速速报名...

GoCN 社区将在2024年全面开启线下活动,全年将在北京、上海、深圳、武汉、成都、杭州、广州等地举办线下 meetup 及大会。GoCN 是目前国内外享有盛誉的 Go 语言社区,每一年的大会都会造就不同的讲师和企业,线下活动也成为 Gopher 们了解前沿发展、深度分享的平台,每年都有上千人参与其中,是讲师们很好的展现平台。3月23日,由GoCN社区联合微派网络共同举办的的技术盛宴——武汉mee...

2024-02-23 19:37:43 65

转载 Go语言进入Tiobe指数前10名

谷歌的 Go 语言(即 golang)在 Tiobe 语言流行度指数中达到了历史最高位置。该语言目前在语言流行度排名中排名第八,并且多年来一直在上升。Go可能最出名的是用于开发Docker和Kubernetes的语言,一年前在 Tiobe 指数中攀升至前 10 名,但目前的排名是有史以来最高的。Tiobe 首席执行官 Paul Jansen 回忆了 2009 年 11 月 Google 宣布 Go...

2024-02-22 08:00:38 43

转载 Go中最常用的数据校验库

项目地址: github.com/go-playground/validator/v10标记标记说明例required必填Field或Struct validate:"required"omitempty空时忽略Field或Struct validate:"omitempty"len长度Field validate:"len=0"eq等于Field validate:"eq=0"gt大于Field...

2024-02-21 08:01:43 40

转载 Meetup上海站开启报名!这次千万不要错过!

GoCN 社区将在2024年全面开启线下活动,全年将在北京、上海、深圳、武汉、成都、杭州、广州等地举办线下 meetup 及大会。GoCN 是目前国内外享有盛誉的 Go 语言社区,每一年的大会都会造就不同的讲师和企业,线下活动也成为 Gopher 们了解前沿发展、深度分享的平台,每年都有上千人参与其中,是讲师们很好的展现平台。在阳春三月的柔情中,上海站的Meetup如期绽放,成为汇聚技术与友谊的璀...

2024-02-19 14:53:52 443

转载 从慢速到SIMG: 一个Go优化的故事

SourceGraph 的工程师 Camden Cheek 提供的一个利用 SIMD 进行 Go 性能优化的故事:From slow to SIMD: A Go optimization story[1]。这是一个关于某函数的故事,这个函数被大量调用,而且这些调用都在关键路径上。让我们来看看如何让它变快。剧透一下,这个函数是一个点积函数。“点积(Dot Product),也称为内积或数量积,是一种...

2024-02-18 08:00:28 40

转载 Go语言版本1.22的路由增强功能

Go 1.22对 net/http包中的路由器进行了两项增强:方式匹配和通配符。这些特性允许你将常见的路由表示为模式,而非Go代码。尽管这些功能简单易解释和使用,但想选择成功模式的正确规则(当多个模式匹配一个请求时)依然是个挑战。我们作出这些改变是为了持续让Go成为构建生产系统的优秀语言。我们研究了许多第三方web框架,提取出我们认为最常用的特性,并将它们集成进 net/http。然后我们通过在G...

2024-02-14 23:27:16 70

转载 极限挑战:使用 Go 打造百亿级文件系统的实践之旅

JuiceFS 企业版是一款为云环境设计的分布式文件系统,单命名空间内可稳定管理高达百亿级数量的文件。构建这个大规模、高性能的文件系统面临众多复杂性挑战,其中最为关键的环节之一就是元数据引擎的设计。JuiceFS 企业版于 2017 年上线,经过几年的不断迭代和优化,在单个元数据服务进程使用 30 GiB 内存的情况下,能够管理约 3 亿个文件,并将元数据请求的平均处理时间维持在 100 微秒量级...

2024-02-07 13:22:01 43

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除