自定义博客皮肤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语言相关的资讯推送。

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

原创 Farewell Go,Hello AI:是时候说再见了

每一次告别都是新的开始,每一次转身都是为了更好的相遇。今天,我怀着复杂的心情,想和大家分享一个重要的决定:GoCN社区将正式转型升级为ThinkInAI社区。这不仅是一次组织形式的转变,更是一次面向未来的战略性升级。难忘的Go语言岁月时光倒回2009年,那是我与Go语言的初次相遇。转眼间,这门诞生于Google的编程语言已经陪伴我走过了16年的职业生涯。这不仅仅是一段使用某个编程工具的经历,更是一...

2025-02-14 23:01:14 746

转载 关于Go错误处理新提案的一个想法:?操作符这样用行不行

1. 背景Ian Taylor在关闭了旨在消除Go错误处理样板代码的issue[1]之后,又另起了一个“同名”的discussion[2]。错误处理真不愧是Go社区呼声最高的问题,几天之内又收到了近500条回复!不过到目前为止,依然没有形成统一和高赞的意见。关于error handling的样板代码过多,其实我个人是可以接受的,即便不做出任何改变也是ok的,估计Go社区与我有相同看法的也不在少数。...

2025-02-11 09:55:38 30

转载 啥时候等到Go官方支持SIMD? 不等也行!

单指令多数据流(SIMD,Single Instruction Multiple Data)是一种并行计算技术,允许一条指令同时处理多个数据点。SIMD 在现代 CPU 中广泛应用,能够显著提升计算密集型任务的性能,如图像处理、机器学习、科学计算等。随着 Go 语言在高性能计算领域的应用逐渐增多,SIMD 支持成为了开发者关注的焦点。当前很多主流和新型的语言都有相应的simd库了,比如 C++、R...

2025-02-06 08:01:19 63

转载 夜莺监控支持 ES 日志告警了

夜莺项目( https://github.com/ccfos/nightingale )发布了 v8.0.0-beta.3 版本,这个版本主要是支持了 ES 日志告警,下面给大家介绍一下。新版本下载到如下地址下载发布包:https://github.com/ccfos/nightingale/releases/tag/v8.0.0-beta.3由于夜莺 v8 版本默认配置使用 sqlite 和 m...

2025-01-16 08:04:00 84

转载 Go错误处理新思路:`?`操作符能否终结if err != nil样板代码

错误处理一直是编程中的重要组成部分,Go语言以其独特的错误处理机制而闻名。Go摒弃了传统主流语言(如Java等)的异常处理模型,而是将错误作为函数返回值的一部分,鼓励开发者显式地处理每个可能出现的错误。这种机制的核心在于error接口和if err != nil语句。然而,随着Go项目规模的增长,if err != nil的频繁出现导致了大量的代码冗余,让代码显得不那么优雅。因此,如何改进错误处理...

2025-01-14 08:03:48 63

转载 超简单!用 Go 启动 Redis 实例

最近写了几篇 Go 并发编程相关的文章,想必有些读者看多了可能会有些厌倦,今天来点轻松的内容,介绍一个可以用来启动redis-server的开源库github.com/stvp/tempredis。这是一个用 Go 语言开发的包,专门用于创建临时的 Redis 实例,主要用于测试目的。它可以在本地启动一个临时的 Redis 服务实例,在测试结束后自动关闭并清理,帮助开发者避免对实际的 Red...

2025-01-10 08:01:18 56

转载 Rust 并发模型 vs Go并发模型:无栈协程 vs 有栈协程

“所以你会理解,为什么在最近的1百万并发情况下Go使用了那么多的内存。虽然 Rust 和 Go 都是从前一代编程语言的错误中吸取教训的现代编程语言,但它们在处理并发性的方式上完全不同,这一点正如我们将要看到的,对性能和开发者体验有着巨大的影响。但首先,为什么我们需要并发性?如今,大多数程序都需要与可能需要一定时间才能返回响应的资源进行交互:比如网络或磁盘。如果我们在等待网络响应的过程中完全阻塞程序...

2025-01-06 08:01:00 87

转载 Pitching Go in 2025

本篇内容是根据2024年12月份#339 Pitching Go in 2025[1]音频录制内容的整理与翻译过去十年中出现了如此多优秀的编程语言,其中许多都是专门构建的,Go 在何时何地仍然有意义,您如何在工作中证明它的存在?Johnny Boursiquot:大家好,欢迎收听新一期的 Go Time。我是主持人Johnny Boursiquot[2],今天我们有一期特别的节目。我觉得这期很...

2024-12-31 10:23:50 35

转载 Go 1.24新特性前瞻:工具链和标准库

在上一篇文章中,我们介绍了即将于2025年2月发布的Go 1.24版本在语法、编译器和运行时方面的主要变化。本文将继续承接上文,重点介绍Go 1.24在工具链和标准库方面的重要更新,供大家参考。1. 工具链1.1go.mod新增tool指示符,支持对tool的依赖管理(#48429)[1]我们日常编写Go项目代码时常常会依赖一些使用Go编写的工具,比如golang.org/x/tools/cmd...

2024-12-27 12:26:50 327

转载 Go 并发控制:sync.WaitGroup 详解

前段时间我在《Go 并发控制:errgroup 详解》一文中讲解了errgroup的用法和源码,通过源码我们知道errgroup内部是使用sync.WaitGroup实现的,那么本文就更进一步,来探索下sync.WaitGroup源码是如何实现的。使用示例sync.WaitGroup可以用来阻塞等待一组并发任务(goroutine)的完成,使用示例如下:packagemain...

2024-12-24 16:37:35 112

转载 Go 1.24新特性前瞻:语法、编译器与运行时

自2020年底撰写《Go 1.16版本新特性前瞻》以来,四年转瞬而逝。在这段时间里,每当Go的大版本开发进入新特性冻结(freeze)阶段,我都会为大家带来该版本的特性前瞻,旨在让大家更早地了解和实验这些新特性,从而在版本正式发布时能够准确评估是否应用它们。11月末,Go 1.24的新特性开发已经冻结,我认为是时候对Go 1.24新特性进行前瞻了。本次前瞻将分为两篇进行,本文,也就是第一篇将讲解语...

2024-12-20 10:51:28 251

转载 Go语言五种实现broadcaster的方法,你喜欢哪一种?

昨天看到 Jaana Dogan 创建了一个 broadcaster 的库, 话说美女 Jaana Dogan 又回到了 Google 了么。她的实现我们就当做 broadcaster 的第一个实现吧。什么是 broadcaster?就是村口的大喇叭,一播音,全村都知道了。Jaana Dogan 实现的这个 broadcaster 只有通知的功能,没有传递消息,也不能重用。我们就以这个库为基准,看...

2024-12-18 11:26:18 43

转载 量子计算入门与Go模拟

2019年,Google宣布实现"量子霸权",声称其53量子比特的量子计算机完成了一个经典超级计算机需要1万年才能完成的计算任务。这一宣告在当时引发了广泛关注和热议。而在这个过程中,我们也看到了太多对量子计算的误解。有人将其想象成未来取代经典计算机的全能机器,认为它能以指数级速度解决所有计算问题;也有人认为量子计算只是一个遥不可及的科研概念,与实际应用毫无关联。五年过去了,世界依然被经典计算机主宰...

2024-12-13 08:03:24 90

转载 一文搞懂如何在Go包中支持Hash-Based Bisect调试

bisect是一个英文动词,意为“二分”或“分成两部分”。在数学和计算机科学中,通常指将一个区间或一个集合分成两个相等的部分。对于程序员来说,最熟悉的bisect应用莫过于下面两个:算法中的二分查找(binary search)二分查找是一个经典且高效的查找算法,任何一本介绍数据结构或计算机算法的书都会包含对二分查找的系统说明。所谓二分查找就是通过不断将搜索区间一分为二来找到目标值。一些排序算法也...

2024-12-10 09:00:41 53

转载 在 Go 中如果获取 goroutine 的 id?

如果你使用过如 Python、Java 等主流支持并发的编程语言,那么通常都能够比较容易的获得进程和线程的 id。但是在 Go 语言,没有直接提供对多进程和多线程的支持,而是提供了 goroutine 来支持并发编程。不过在 Go 中,获取 goroutine 的 id 并不像其他编程语言那样容易,但依然有办法,本文就来介绍下如何实现。获取当前进程的 id首先,虽然 Go 没有提供多进程编程,但启...

2024-12-06 11:30:50 81

转载 惊!Go在十亿次循环和百万任务中表现不如Java,究竟为何?

编程语言比较的话题总是能吸引程序员的眼球!近期外网的两篇编程语言对比的文章在国内程序员圈里引起热议。一篇是由Ben Dicken (@BenjDicken)[1]做的语言性能测试[2],对比了十多种主流语言在执行10亿次循环(一个双层循环:1万 * 10 万)的速度;另一篇则是一个名为hez2010的开发者做的内存开销测试[3],对比了多种语言在处理百万任务时的内存开销。下面是这两项测试的结果示...

2024-12-03 10:40:31 120

转载 Go包构建:专家也未必了解的文件选择细节

在Go语言开发中,包(package)是代码组织的基本单位[1],也是基本的构建单元。Go编译器会将每个包构建成一个目标文件(.a),然后通过链接器将这些目标文件链接在一起,形成最终的可执行程序。尽管Go包的构建过程看似简单,但实际上蕴含着许多值得深入了解的细节。例如,当我们执行go build命令时,Go编译器是如何选择需要编译的源文件的?你可能会回答:“不就是通过文件名中的ARCH和OS标识以...

2024-11-29 14:18:21 53

转载 Go 并发控制:singleflight 详解

singleflight 是 Go 官方扩展库 x 中提供的扩展并发原语,能够将多个并发请求合并为一个,降低服务端压力。本文就来介绍下它的用法和实现原理。请求合并singleflight 主要用于抑制重复的并发调用,从而避免对同一资源进行重复操作,提升系统性能。比如,当我们有多个 goroutine 并发调用一个同一个函数时,singleflight 能够实现只让一个 goroutine 发起调用...

2024-11-27 09:54:32 430

转载 Golang GC 从原理到优化

这篇文章与笔者之前所写几篇不同,是一篇综述型的文章,将从 GC 理论、在 Golang 中的应用、以及如何去做优化,这三个角度逐次进行阐述,文章中对于一些技术点会引用到多篇文章,希望读者也都能进行阅读,这有助于更全面的了解 Golang GC。理论GC 和内存分配方式是强相关的两个技术,因此在分析两者的设计原理之时,要结合起来一起看。GC 算法标记-清除标记-整理标记-复制分代收集关于以上算法的简...

2024-11-20 13:02:41 127

转载 IO 密集型服务 耗时优化

背景项目背景Feature 服务作为特征服务,产出特征数据供上游业务使用。服务压力:高峰期 API 模块 10wQPS,计算模块 20wQPS。服务本地缓存机制:计算模块有本地缓存,且命中率较高,最高可达 50% 左右;计算模块本地缓存在每分钟第 0 秒会全部失效,而在此时流量会全部击穿至下游 Codis;Codis 中 Key 名 = 特征名 + 地理格子 Id + 分钟级时间串;Feature...

2024-11-18 13:37:35 74

转载 Go 语言-计算密集型服务 性能优化

背景项目背景worker 服务数据链路图worker 服务消费上游数据(工作日高峰期产出速度达近200 MB/s,节假日高峰期可达300MB/s以上),进行中间处理后,写入多个下游。在实践中结合业务场景,基于快慢隔离的思想,以三个不同的 consumer group 消费同一 Topic,隔离三种数据处理链路。面对问题worker 服务在高峰期时 CPU Idle 会降至 60%,因其属于数...

2024-11-14 11:22:32 91

转载 Go 并发控制:sync.Once 详解

在 Go 语言的并发编程中,常常会遇到需要确保某个操作仅执行一次的场景。sync.Once 是 Go 标准库中的一个简单而强大的工具,专门用于解决这种需求。本文将深入解析 sync.Once 的使用方法和原理,帮助你更好地理解 sync.Once 在并发控制中的用法。sync.Oncesync.Once 是 Go 语言 sync 包中的一种同步原语。它可以确保一个操作(通常是一个函数)在程序的生命...

2024-11-12 15:03:27 221

转载 Go 并发控制:errgroup 详解

errgroup 是 Go 官方库 x 中提供的一个非常实用的工具,用于并发执行多个 goroutine,并且方便的处理错误。我们知道,Go 标准库中有个 sync.WaitGroup 可以用来并发执行多个 goroutine,errgroup 就是在其基础上实现了 errgroup.Group。不过,errgroup.Group 和 sync.WaitGroup 在功能上是有区别的,尽管它们都用...

2024-11-07 11:19:36 255

转载 Go中秘而不宣的数据结构 BitVec:位向量125MB存储10亿个数据

秘而不宣系列Go中秘而不宣的数据结构 Treap:平衡树不一定就用红黑树Go中秘而不宣的数据结构 runq, 难怪运行时调度那么好Go中秘而不宣的数据结构 spmc, 10倍性能于 channel位图(bitmap)是一种优雅而高效的数据结构,它巧妙地利用了计算机最底层的位运算能力。你可以把它想象成一个巨大的开关阵列,每个开关只有打开和关闭两种状态 —— 这就是位图的本质。每一位都可以独立控制,却...

2024-11-04 13:13:37 61

转载 Go中秘而不宣的数据结构 Treap:平衡树不一定就用红黑树

秘而不宣系列Go中秘而不宣的数据结构 runq, 难怪运行时调度那么好Go中秘而不宣的数据结构 spmc, 10倍性能于 channeltreap 是一棵二叉树,它同时维护二叉搜索树 (BST) 和堆的属性, 所以由此得名 (tree + heap   ⇒  treap)。从形式上讲,treap (tree + heap) 是一棵二叉树,其节点包含两个值,一个 key 和一个 priorit...

2024-10-29 12:01:12 65

转载 Go trace的魔力

Felix Geisendörfer 和 Michael Knyszek 与 Natalie 一起讨论 Go 执行跟踪:为什么它们很棒、常见的用例、它们最近如何变得更好等等。本篇内容是根据2024年3月份#310 The magic of a trace[1]音频录制内容的整理与翻译过程中为符合中文惯用表达有适当删改, 版权归原作者所有.Natalie Pistunovich: 我是 Natali...

2024-10-24 12:05:44 84

转载 Go中秘而不宣的数据结构 runq, 难怪运行时调度那么好

秘而不宣系列:Go中秘而不宣的数据结构 spmc, 10倍性能于 channel首先,让我们先来回顾 Go 运行时的 GPM 模型。这方面的介绍网上的资料都非常非常多了,但是我们也不妨回顾一下:“GPM 模型中的 G 代表 goroutine。每个 goroutine 只占用几 KB 的内存,可以轻松创建成千上万个。G 包含了 goroutine 的栈、指令指针和其他信息,如阻塞 channel ...

2024-10-22 13:42:03 115

转载 Go 错误处理指北:Defer、Panic、Recover 三剑客

Go 语言中的错误处理不仅仅只有 if err != nil,defer、panic 和 recover 这三个相对来说不不如 if err != nil 有名气的控制流语句,也与错误处理息息相关。本文就来讲解下这三者在 Go 语言中的应用。Deferdefer 是一个 Go 中的关键字,通常用于简化执行各种清理操作的函数。defer 后跟一个函数(或方法)调用,该函数(或方法)的执行会被推迟到外...

2024-10-18 12:32:38 225

转载 Go中秘而不宣的数据结构 spmc, 10倍性能于 channel

Go 标准库和运行中中,有一些专门针对特定场景优化的数据结构,这些数据结构并没有暴露出来,这个系列就是逐一介绍这些数据结构。这一次给大家介绍的就是一个 lock-free、高性能的单生产者多消费者的队列:PoolDequeue 和 PoolChain。到底是一个还是两个呢?主要是 PoolDequeue, 它是一个固定尺寸,使用 ringbuffer (环形队列) 方式实现的队列。PoolChai...

2024-10-15 12:11:54 121

转载 Go语言中位操作还能这么搞?难怪别人的程序性能那么好

位操作(bit manipulation)在计算机科学和编程中非常常见,主要应用于以下几个场景:性能优化:位操作通常比算术操作和逻辑操作更快,因此在需要高性能的场合(如游戏开发、嵌入式系统)常被使用。如果再配合 SIMD,如虎添翼状态标志:可以使用位来表示多个布尔状态,例如,一个整数的每一位可以表示一个开关的状态(开或关)。这对于节省内存和简化状态管理非常有用。比如使用 uint64 表示某个设备...

2024-10-11 10:15:19 79

转载 Go项目中使用Git Submodule,还有这个必要吗?

在软件开发中,依赖管理一直是一个重要的议题,特别是在像Go这样的编程语言中,随着项目的扩展,如何有效管理依赖变得至关重要。Git Submodule作为Git的一个重要功能,允许在一个Git仓库中嵌入另一个仓库,从而方便地管理跨项目的代码共享。然而,Go语言引入的Go Module机制似乎已经解决了依赖管理的问题,那么在Go项目中,是否还有使用Git Submodule的必要呢?本文将简单探讨一下...

2024-10-08 12:01:38 111

转载 Go 如何做好缓存

缓存对于应用API提速来说不可或缺,所以在设计初始阶段如果有较高的性能要求必不可少。在做设计阶段如果需要使用缓存,最重要的是要估算好需要使用多少内存。我们首先要明确自己需要缓存的数据有哪些内容。在用户量不断增长的应用中,如果把所有使用的数据都进行缓存是不可取的。因为应用的本地内存受到单机物理资源的制约,无限制的缓存数据最终会出现 OOM ,而导致应用被强制退出。如果是分布式缓存,则高昂的硬件成本也...

2024-09-30 14:32:53 109

转载 “类型名称”在Go语言规范中的演变

Go语言规范(The Go Programming Language Specification)[1]是Go语言的核心文档,定义了该语言的语法、类型系统和运行时行为。Go语言规范的存在使得开发者在实现Go编译器时可以依赖一致的标准,它确保了语言的稳定性和一致性,特别是在类型系统设计中,Go团队通过规范推动了语言的简洁性、稳定性与可维护性。对于Go开发者而言,Go语言规范也是语法特性使用的参考手册...

2024-09-26 10:37:01 148

转载 htmx:Gopher走向全栈的完美搭档?

在传统的Web开发领域,前端和后端开发通常被明确划分。前端主要负责用户界面的交互和视觉呈现,运用HTML、CSS和JavaScript等技术;后端则专注于服务器逻辑、数据库管理和核心功能实现,常用Go、Java、PHP、Ruby等语言。然而,随着技术的不断演进和开发流程的优化,全栈开发逐渐成为一种趋势。全栈开发者能够在项目的不同阶段灵活转换角色,有效降低沟通成本和缩短开发周期。他们对系统的整体架构...

2024-09-23 15:23:13 269

转载 如何用Go来构建LLM应用

随着大型语言模型(LLM)及其相关工具(如嵌入模型)在过去一年中能力显著提升,越来越多的开发者考虑将LLM集成到他们的应用程序中。由于LLM通常需要专用硬件和大量计算资源,它们通常作为网络服务打包,提供API供访问。这就是OpenAI和Google Gemini等领先LLM的API工作方式;即使是像Ollama这样的自托管LLM工具,也将LLM封装在REST API中以供本地使用。此外,利用LLM...

2024-09-18 09:43:02 175

转载 Go unique包:突破字符串局限的通用值Interning技术实现

Go的1.23版本中引入了一个新的标准库包unique[2],为Go开发者带来了高效的值interning能力。这种能力不仅适用于字符串类型值,还可应用于任何可比较(comparable)类型的值。本文将简要探讨interning技术及其在Go中的实现方式,通过介绍unique包的功能,帮助读者更好地理解这一技术及其实际应用。1. 从string interning技术说起通常提到internin...

2024-09-18 09:39:29 158

转载 从“黑神话:悟空”看Go为什么不适合AAA游戏开发

2024年8月20日,国产AAA游戏《黑神话:悟空》正式发布!凭借其卓越的画面表现、成熟的玩法和令人惊叹的技术细节,迅速引爆了全球游戏市场,在上线不到一周的时间内,全平台已经大卖超1000万套,一举成为全球游戏玩家瞩目的焦点,并获得普遍的好评。作为一款AAA级大作,它不仅在艺术设计上精益求精,背后更是依托于极高的技术标准。这类游戏的开发对编程语言和技术栈的要求十分严苛,尤其是在图形渲染、物理引擎、...

2024-09-13 17:06:06 264

转载 Go 错误处理指北:Error vs Exception vs ErrNo

很多有其他编程语言经验的人初次接触 Go 语言时,想必对 if err != nil 的错误处理方式感到新奇,之后用久了,竟发现有点令人抓狂。因为很多人不满 Go 语言的错误处理方式,甚至有人做了一张梗图:哈哈????,不吹不黑,本文就来对比下 Python、C 以及 Go 这三种编程语言中的异常处理机制,看看你更喜欢哪一种。Python 错误处理因为我接触的第一门编程语言是 Python,所以我就先讲...

2024-09-10 08:30:41 163

转载 「GoTeam 招聘时间」Answer.AI -后端开发工程师

本期招聘企业—Answer.AI公司团队简介我们是 Answer.AI, 美国教育行业排名第一的AI tutor。我们致力于将 AI 应用于教育行业,推动教育平等化。团队成员包含多位连续创业者,团队成员来自于字节跳动、Meta、快手、小米、百度、创新工场等。诚邀对人工智能充满热情、有志于探索大模型在教育领域应用的伙伴加入我们的团队。公司更多介绍详见:https://mp.weixin.qq....

2024-09-06 08:02:17 259

转载 IEEE Spectrum 2024排行榜:Rust和TypeScript崛起,Go语言表现如何?

IEEE Spectrum发布了2024年度编程语言排行榜[1],这份榜单被业界视为权威之一,不仅揭示了一些有趣的趋势,还提供了多维度的语言评估。这里我们也将基于2024榜单,看看编程语言界有哪些新趋势和新变化,特别聚焦于Rust和TypeScript的强势崛起,同时也将探讨Go语言在不同维度上的表现。可能很多人对该榜单不是很熟悉,这里先介绍一下它的数据源以及评估方法。1. 榜单评估方法:全面而深...

2024-09-05 11:31:04 450

空空如也

空空如也

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

TA关注的人

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