自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TonyBai

Kubernetes、Docker、Golang、儿童编程、DevOps、云计算平台和机器学习

  • 博客(763)
  • 资源 (1)
  • 收藏
  • 关注

原创 Go语言中的SIMD加速:以矩阵加法为例

前些日子,一些资深Gopher,比如fasthttp[1]的作者Aliaksandr Valialkin[2]因函数迭代器[3]加入Go 1.23版本[4]而抱怨Go的演进走错了方向:朝着增加复杂性和隐式代码执行的方向发展,而没有专注于Go语言的基本设计哲学——简单性、生产力和性能。Valialkin希望Go团队能专注于一些性能打磨和优化的环节,比如使用SIMD提升一些计算场景下Go代码的性能,避...

2024-07-22 08:00:18 845

原创 通过实例理解Go访问和操作数据库的几种方式

关系数据库操作是Go应用开发中的重要一环,尤其是Go Web应用、微服务等。作为Gopher,我们需要了解几种主流的数据库访问和操作方法,以便在项目中做出适当的选择。我个人在日常开发中较少涉及CRUD类应用,因此使用Go访问和操作数据库的机会并不多,在这方面也算是有一些“短板”。通过在这篇文章中对数据库访问方式进行全面的梳理,我也算是补全一下技能树,同时也能为读者小伙伴提供一些参考。我搜集了目前G...

2024-07-15 08:01:05 924

原创 Go语言编程指南翻译记:一本书,一支队伍,一段难忘的旅程

嘿,各位Gopher们!猜猜发生了什么?我们团队翻译的《Go Fundamentals:Gopher Guides[1]》中文版终于出版啦!没错,就是那本被我们亲切地称为《Go语言编程指南[2]》的Go入门宝典。说实话,看到这本书终于摆在书架上,我的心情就像是刚刚用Go写出了一个超高效的并发程序一样兴奋!翻译这回事儿,我可不是新手先让我跟大家聊聊我的“翻译前传”。其实这已经是我第二次和人民邮电出版...

2024-07-05 08:00:27 679

转载 鸟窝:并发编程,为什么选Go?

我们知道,Go 语言部署简单,自带完善的工具链,不仅容易上手,而且执行性能非常好,已经被越来越多的人当成主要的编程语言。而我当初也算被 Go 的简单高效所打动。它不仅部署方便,自带完善的工具链,特别是 Go 在处理并发场景上表现出的独特性能,更是让我着迷。相对于 Java 语言的繁琐编码,和为了应用设计模式而做的大量冗长设计, Go 提供了便利的并发编程方式 -- 简简单单的语句,就可以创建多个 ...

2024-07-03 08:00:17 36

原创 Go 1.23中的自定义迭代器与iter包

在《Go 1.23新特性前瞻》[1]一文中,我们提到了Go 1.23中增加的一个主要的语法特性就是支持了用户自定义iterator,即range over func试验特性[2]的正式转正。为此,Go 1.23还在标准库中增加了iter包[3],这个包对什么是Go自定义iterator做了诠释:Aniteratorisafunctionthatpassessuccessiveele...

2024-06-24 08:00:08 734

原创 Go团队的工作方式

在Go 1.23版本[1]即将发布(2024.8)之前,在GopherCon 2024[2]开幕(2024.7)之前,Go团队成员Cameron Balahan(Go产品负责人)[3]、 Sameer Ajmani(Go团队工程总监)和Russ Cox(Go团队技术负责人)[4]参加了业界知名的播客栏目GoTime[5]的最新一期活动,主题是“How things get done on the ...

2024-06-22 08:00:12 1059

转载 DIY经典游戏,轻松学Rust编程——重温儿时游戏梦,用Rust写出属于自己的小游戏!...

【译者序】“重温儿时游戏梦”,我感觉这本书的作者是挺讲情怀的,这也是我看完这本书以后感觉它与众不同的一点。这本书不是死板的教程,更像是作者在给你讲故事,讲怎么做好一个游戏,怎么在此过程中学习Rust编程,有点“边玩边学”的感觉。从未有一门语言像 Rust 这样,自推出之后在使用者的口碑中如此两极分化。有人说 Rust 就是一场“骗局”,难学又难用,早晚会在吃尽苦头后放弃;有人却说 Rust 是“神...

2024-06-18 08:00:39 55

原创 Go与神经网络:线性回归

离发表上一篇与机器学习相关的文章《Go与神经网络:张量运算》[1]已经过去整整一年了,AI领域,特别是大模型领域的热度不仅未有减弱,反而愈演愈烈。整个行业变得更卷,竞争更加激烈,大模型你方唱罢我登场,层出不穷,各自能力也都在不断提升,并在自然语言处理、问答、生成等方面展现出强大的能力。同时基于RAG(Retrieval-Augmented Generation)[2]等技术,大模型还可以实时检索相...

2024-06-11 07:57:21 418

原创 Gopher的Rust第一课:Rust代码组织

在上一章的讲解中,我们编写了第一个Rust示例程序"hello, world",并给出了rustc版和cargo版本。在真实开发中,我们都会使用cargo来创建和管理Rust包。不过,Hello, world示例非常简单,仅仅由一个Rust源码文件组成,而且所有源码文件都在同一个目录中。但真实世界中的实用Rust程序,无论是公司商业项目,还是一些知名的开源项目,甚至是一些稍复杂一些的供教学使用的示...

2024-06-07 08:00:12 924

原创 Go 1.23新特性前瞻

2024年5月22日,Go 1.23版本[1]功能特性正式冻结,后续将只改bug,不增加新feature。对Go团队来说,这意味着开始了Go 1.23rc1的冲刺,对我们普通Gopher而言,这意味着是时候对Go 1.23新增的功能做一些前瞻了!在Go没有发布Go 1.23rc1之前,我们至少可以通过以下两种渠道体验Go 1.23的最新特性:通过go install安装tip版本;使用Go pla...

2024-05-30 08:01:55 3301 1

原创 Gopher的Rust第一课:第一个Rust程序

经过上一章[1]的学习,我想现在你已经成功安装好一个Rust开发环境了,是时候撸起袖子开始写Rust代码了!程序员这个历史并不算悠久的行当,却有着一个历史悠久的传统,那就是每种编程语言都将一个名为“hello, world”的示例作为这门语言学习的第一个例子,这个传统始于20世纪70年代那本大名鼎鼎的由布莱恩·科尼根(Brian W. Kernighan)与C语言之父丹尼斯·里奇(Dennis M...

2024-05-27 08:01:12 1208

原创 Go 1.23 Release Notes编写方式改进!

2024.5.22日,Go 1.23 feature冻结!Go团队开始Go 1.23rc1的冲刺,截至发文时,Go 1.23 milestone已经完成59%(https://github.com/golang/go/milestone/212),还有188个open的issue待解决。Go 1.23有哪些新feature?这个我会在后续撰写一篇文章单独说明。这里简单说说Go 1.23 Relea...

2024-05-24 20:00:44 639

原创 Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。这届大会的核心主旨毫无疑问是坚定不移的以AI为中心:Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2],然后面对OpenAI GPT-4o的挑衅,谷歌在大会上直接甩出大杀器Project Astra[3],视觉识别和语音交互效果,跟OpenAI的GPT-4o[4]不相上下;接着,谷歌又祭出文生视频模...

2024-05-20 08:00:45 519

原创 Go早期的那些布道者

Go自2009年开源至今已经快15年了[1]!这期间,有很多人对Go语言的发展做出了重要贡献,起到了至关重要的作用,他们被视为Go语言的早期布道者和鼓吹者。他们向Go社区传达着Go的价值观、Go的最新发展、Go的使用方法以及最佳实践。这些人有来自Go团队的,有来自Google但非Go团队的,也有Go的早期采纳者和贡献者。如今这些人的状况不尽相同。有些人依然在活跃在Go团队中,为Go的演进持续做着贡...

2024-05-18 08:04:04 878

原创 Gopher的Rust第一课:建立Rust开发环境

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

2024-05-11 08:00:08 1150

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

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

2024-05-09 08:00:14 1485

原创 那些可免费使用的在线大语言模型服务

2022年底以ChatGPT[1]为代表的大语言模型的出现掀起了人工智能应用的新浪潮。这些庞大的语言模型经过对海量文本数据的训练,能够理解和生成逼近人类水平的自然语言,在对话、问答、文本生成、代码编写等领域展现出了惊人的能力。最初这种能力“垄断”在OpenAI公司的手里,世界各地的AI爱好者们为了能尽快拿到ChatGPT的使用账号,使出了浑身解数,国内朋友更是如此。不过随着Google、Meta[...

2024-05-07 08:00:30 1280

原创 Go未用代码消除与可执行文件瘦身

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

2024-05-05 08:02:41 871

原创 使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B

2024年4月18日,meta开源了Llama 3大模型[1],虽然只有8B[2]和70B[3]两个版本,但Llama 3表现出来的强大能力还是让AI大模型界为之震撼了一番,本人亲测Llama3-70B版本的推理能力十分接近于OpenAI的GPT-4[4],何况还有一个400B的超大模型还在路上,据说再过几个月能发布。Github上人气巨火的本地大模型部署和运行工具项目Ollama[5]也在第一时...

2024-04-25 08:01:02 1320 1

原创 从零到生产: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-24 08:00:27 962

转载 从今天起,做一个 Rust 程序员

在 Stack Overflow 的年度开发者调查中,Rust 连续第八年成为“最受欢迎的编程语言”。Rust 最近可谓风头正劲,很多人都有所耳闻,但没用过。日前,美国总统拜登公开表示:出于安全考虑,大力发展 Rust 项目,拒绝支持“非 Rust”项目。Lars Bergstrom(Google 工程总监)在一个分享中表示:Rust 和 go 语言一样有很高效率的生产力,Rust 团队的生产力是...

2024-04-23 08:00:27 66

原创 Gopher的Rust第一课:Rust的那些事儿

要说这两年后端编程语言谁最火,Rust[1]说自己第二,没人敢说第一。Rust连续8年霸榜stackoverflow最受推崇的编程语言[2],甚至被推特之父Jack Dorsey称为“完美的编程语言”:注:最火:仅代表人气最旺,最受欢迎,但并不代表使用者最多。如果你经常读我的博客,你可能会问:“你不是Go语言布道师吗?怎么也要转Rust了?”其实不然,学习Rust不是要蹭热度,而是实际开发的需要。...

2024-04-22 08:01:56 816

原创 要么返回错误值,要么输出日志,别两样都做

1. 缘起这周,一个产品团队内进行Go代码评审时,得到了一个结论:所有的if err != nil的地方都应该输出错误日志。然而,这种做法并不是最佳实践,它存在一些问题。首先,打印过多的错误日志会导致日志文件变得冗长和难以阅读。其次,重复的错误信息会增加冗余。此外,每一层都打印错误日志,一旦错误信息设计不当,可能会导致上下文信息的丢失。让我们来看一个示例,说明为什么同时输出错误日志和返回错误值会导...

2024-04-15 08:00:51 333

原创 选择正确的Go Module Path

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

2024-04-10 08:01:17 807

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

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

2024-03-30 08:02:26 1038

原创 Go 1.22中值得关注的几个变化

美国时间2024年2月6日,正当中国人民洋溢在即将迎来龙年春节的喜庆祥和的气氛中时,Eli Bendersky[1]代表Go团队在Go官博发文“Go 1.22 is released![2]”,正式向世界宣告了Go 1.22版本的发布!注:大家可以从Go官网下载Go 1.22的第一个版本go 1.22.0,也可以在Go playground[3]上选择Go 1.22版本在线体验Go 1.22的语法...

2024-02-19 08:00:45 1099

原创 2024年的Rust与Go

本文译自《Rust vs Go in 2024》[1]。我可以说些什么而不让大家生气吗?Rust和Go哪个更好?你应该为下一个项目选择哪种语言,为什么?两者在性能、简单性、安全性、功能特性、规模化(scale)和并发性等方面如何比较?它们有什么共同点,又有什么根本区别?让我们通过Rust和Go的友好且公平的比较来找到答案。1. Rust和Go都很棒首先,非常重要的是,Go和Rust都是绝对优秀的编...

2024-01-25 08:03:24 1173 1

原创 依赖Kafka的Go单元测试例解

Kafka[1]是Apache基金会开源的一个分布式事件流处理平台,是Java阵营(最初为Scala)中的一款杀手级应用,其提供的高可靠性、高吞吐量和低延迟的数据传输能力,让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。在日常开发Go程序时,我们经常会遇到一些依赖Kafka的代码[2],如何对这些代码进行测试,尤其是单测是摆在Go开发者前面的一个现实问题!有人说用moc...

2024-01-09 08:00:43 1208

原创 Go语言之父的反思:我们做对了什么,做错了什么

在《2023年Go语言盘点:稳中求新,稳中求变[1]》和《Go测试的20个实用建议[2]》两篇文章中,我都提到过已经退居二线的Go语言之父Rob Pike[3]在Go开源14周年[4]的那天亲自在GopherCon Australia 2023上发表了“What We Got Right, What We Got Wrong”的主题演讲来回顾Go诞生以来的得与失。近期Rob Pike终于将这次演进...

2024-01-08 08:00:30 934

原创 Go测试的20个实用建议

2023年11月初,Go语言技术负责人Russ Cox在GopherCon Australia 2023[1]大会上进行了题为“Go Testing By Example”[2]的演讲:12月初Russ Cox重新录制了该演讲内容的视频,并在个人网站[3]上放了出来。这个演讲视频是关于如何编写好的Go测试的,Russ Cox介绍了20个实用建议,非常值得Go初学者甚至Go资深开发者学习并应用到实践...

2024-01-02 07:50:42 1003

原创 2023年Go语言盘点:稳中求新,稳中求变

时光荏苒,转眼间已经是2023年的最后一天了。《2022年Go语言盘点:泛型落地,无趣很好,稳定为王[1]》仿佛就写在昨天。回首这一年,全球彻底从新冠大流行中得以复苏,Go语言也不例外,最直观的表现就是全球各地的GopherCon技术大会或小型Meetup都纷纷从停办/线上的状态来到了线下,并获得Gopher们的热烈欢迎和踊跃参与,比如下图中的GopherCon[2]、GopherCon UK[3...

2023-12-31 13:39:53 6372 5

原创 Go 1.22新特性前瞻

美国时间2023年12月20日,Go官方宣布Go 1.22rc1发布,开启了为期2个多月的、常规的公测之旅,Go 1.22预计将于2024.2月份正式发布!除了在官网下载Go 1.22rc1版本进行新特性体验之外,我们还可以通过在线的Go Playground选择“Go dev branch”来体验(相比下载安装,在线版本体验会有一些局限):注:关于Go的多种安装方法,《Go语言第一课》专栏有系统...

2023-12-26 08:03:06 1456

原创 通过实例理解OpenID身份认证

在《通过实例理解OAuth2[1]》一文中,我们以实例方式讲解了OAuth2授权码模式(Authorization Code)模式的工作原理。实例中的照片冲印服务经过用户(tonybai)的授权后,使用用户提供的code(实则是由授权服务器分配并通过用户的浏览器重定向到照片冲印服务的)到授权服务器换取了access token,并最终使用access token从云盘系统中读取到了用户的照片信息。...

2023-12-23 08:01:55 1229

原创 通过实例理解OAuth2授权

在之前的《通过实例理解Go Web身份认证的几种方式[1]》和《通过实例理解Web应用授权的几种方式[2]》两篇文章中,我们对Web应用身份认证(AuthN)和授权(AuthZ)的几种方式做了介绍并配以实例增强理解。在现实世界中,还有一大类的认证与授权是在前面的文章中没有作为重点介绍的,那就是OAuth2授权[3]与基于OAuth2之上的OpenID身份认证(OIDC, OpenID Connec...

2023-12-16 12:00:36 971

转载 2024线下活动全面启动,1月6日深圳站不见不散~

亲爱的 gopher们,非常激动地宣布:2024年我们将全面启动一系列令人期待的线下活动!我们不仅将在北京、上海、深圳、武汉、成都、杭州、广州、西安等城市举办 meetup,还将在北京和上海举办备受瞩目的 GopherChina 大会。在此,我们开放2024议题征集通道,欢迎各位有实战经验、独特观点的小伙伴勇跃分享~议题提交扫这里~2024开年第一场 meetup 将由 GoCN 社区联合 Aft...

2023-12-15 08:02:44 117

原创 简单之道

已经退居二线的Go语言之父Rob Pike近日发表了一篇名为“Simplicity”[1]的博文,记述了2009年在Google内部一次圆桌会议上发表的演讲内容。Pike老先生在这个时间点发表这篇文章究竟有何深意呢?是对Go语言演进的路线[2]有所不满吗?我们不得而知。不过,这篇文章的内容却是非常值得我们学习,这里我简单翻译一下,供大家参考。2009年5月,Google举办了一次内部的“设计巫术(...

2023-12-12 08:00:35 955

原创 Go未来演进:基于共同目标和数据驱动的决策

自从Go语言之父Rob Pike从Google退休并隐居澳洲后,Russ Cox便成为了Go语言团队的“带头大哥”,虽然其资历还无法与依旧奋战在一线的另外一位Go语言之父Robert Griesemer相比。如今,Russ Cox对Go语言未来的演化发展是很有“发言权”的,Go module的引入便是Russ Cox的重要决策之一。从Go社区来看,这些年来,以Russ Cox为首的Go团队对Go演...

2023-12-11 08:00:50 899

原创 有效表达软件架构的最小图集

无论你是专职的软件架构师,还是在团队内兼职充当软件架构师角色的开发人员,一旦你处在软件架构师这个位置上,你自然就会遇到软件架构设计的三个困惑:如何更深刻地理解业务;如何更正确地取舍(包括技术性和业务性的);如何更有效地表达软件架构。以上每个困惑展开来写都够写一本书的。而在这篇文章中,我仅聚焦最后一个困惑,聊聊我心目中表达软件架构的有效方式 -- 最小图集(Minimum Diagram Set)。...

2023-12-07 08:00:28 816

原创 通过实例理解API网关的主要功能特性

在当今的技术领域中,“下云”的概念正逐渐抬头,像David Heinemeier Hansson[1](37signals公司的联合创始人, Ruby on Rails的Creator)就直接将公司所有的业务都从公有云搬迁到了自建的数据中心[2]中。虽说大多数企业不会这么“极端”,但随着企业对云原生架构采用的广泛与深入,不可避免地面临着对云服务的依赖。云服务在过去的几年中被广泛应用于构建灵活、可扩...

2023-12-03 18:00:38 1060

原创 一文搞懂Go gRPC服务Handler单元测试

在云原生时代和微服务架构背景下,HTTP和RPC协议成为服务间通信和与客户端交互的两种主要方式。对于Go语言而言,标准库提供了net/http/httptest包,为开发人员提供了便捷的方式来构建服务端HTTP Handler单元测试的测试脚手架代码,而无需真正建立HTTP服务器,让开发人员可以聚焦于对Handler业务逻辑的测试。比如下面这个示例://grpc-test-examples/ht...

2023-11-25 08:00:31 935

BigPIM

BigPIM是一款个人信息管理软件,类似著名的Winpim,目前还有一些功能尚未完成而且还存在许多bug.

2006-03-16

空空如也

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

TA关注的人

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