自定义博客皮肤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、云计算平台和机器学习

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

原创 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 284

原创 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 470

原创 Go早期的那些布道者

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

2024-05-18 08:04:04 813

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

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

2024-05-11 08:00:08 1061

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

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

2024-05-09 08:00:14 1103

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

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

2024-05-07 08:00:30 1004

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

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

2024-05-05 08:02:41 827

原创 使用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 861

原创 从零到生产: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 913

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

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

2024-04-23 08:00:27 26

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

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

2024-04-22 08:01:56 722

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

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

2024-04-15 08:00:51 321

原创 选择正确的Go Module Path

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

2024-04-10 08:01:17 795

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

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

2024-03-30 08:02:26 1003

原创 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 1066

原创 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 1114 1

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

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

2024-01-09 08:00:43 1187

原创 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 918

原创 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 994

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

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

2023-12-31 13:39:53 6236 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 1341

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

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

2023-12-23 08:01:55 1165

原创 通过实例理解OAuth2授权

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

2023-12-16 12:00:36 942

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

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

2023-12-15 08:02:44 108

原创 简单之道

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

2023-12-12 08:00:35 943

原创 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 890

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

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

2023-12-07 08:00:28 801

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

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

2023-12-03 18:00:38 992

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

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

2023-11-25 08:00:31 907

原创 通过实例理解Web应用跨域问题

在开发Web应用的过程中,我们经常会遇到所谓“跨域问题(Cross Origin Problem)”。跨域问题是由于浏览器的同源策略(Same-origin policy)[1]导致的,它限制了不同源(Origin:域名、协议或端口)之间的资源交互。在这篇文章中,我将通过一些具体的示例来把跨域问题以及主流解决方法说清楚,供大家参考。1. 什么是跨域问题跨域问题指的是当一个Web应用程序在访问另一个...

2023-11-20 08:00:41 104

原创 关系代数、SQL语句和Go语言示例

近些年,数据库领域发展日新月异,除传统的关系型数据库外,还出现了许多新型的数据库,比如:以HBase、Cassandra、MongoDB为代表的NoSQL数据库,以InfluxDB、TDEngine为代表的时序数据[1]库,以Neo4J、Dgraph为代表的图数据库,以Redis、Memcached等为代表的内存数据库,以Milvus为代表的向量数据库,以CockroachDB、TiDB为代表的H...

2023-11-15 08:00:25 463 1

原创 通过实例理解Web应用的机密管理

如果你是一个Web应用系统的开发人员,你的日常大概率是“乐此不疲”地做着CRUD[1]的活儿,很少接触到安全方面的内容。如果这时有人和你提到“机密(信息)管理(secret management)”,你大概率会说:那是啥?和我有关系吗?你只是大多应用系统开发人员中的一个典型代表。现阶段,很多开发人员,尤其是业务应用开发人员在工作中较少甚至没有接触过专门的机密管理系统,在系统设计时也较少考虑到机密管...

2023-11-08 08:01:00 110

原创 通过实例理解Web应用授权的几种方式

预告:下周一会发一个软文,大家担待一下,高低忍一忍在前面的系列文章中,我们了解了Go Web应用身份认证的几种方式[1],也知道了该如何相对安全地存储用户的密码信息[2],最大程度减小在系统数据库被攻破时用户密码信息的泄露程度。一旦用户通过身份验证,他/她就可以以合法的身份进入到系统中,那么问题来了:用户进入系统后是否就可以“为所欲为”了呢?显然不是! 比如我们以普通用户身份登录github,身份...

2023-11-05 08:00:21 339

原创 通过实例理解Web应用用户密码存储方案

在上一篇文章《通过实例理解Go Web身份认证的几种方式》[1]中,我们了解了Web应用的多种身份验证方式。但无论哪种方式,用户初次访问Web应用的注册流程和登录流程是不可避免的,而基于用户名密码的注册流程依旧是当今主流。注册后,Web应用后端是如何保存用户密码的呢?历史上都有哪些存储方案?当今的主流存储方案又是什么呢?在这篇文章中,我们就来说说Web应用的各种密码存储方案的优缺点,并通过实例来理...

2023-10-26 08:00:17 128

原创 通过实例理解Go Web身份认证的几种方式

在2023年Q1 Go官方用户调查报告[1]中,API/RPC services、Websites/web services都位于使用Go开发的应用类别的头部(如下图):我个人使用Go开发已很多年,但一直从事底层基础设施、分布式中间件等方向,Web应用开发领域涉及较少,像Web应用领域常见的CRUD更是少有涉猎,不能不说是一种“遗憾”^_^。未来一段时间,团队会接触到Web应用的开发,我打算对Go...

2023-10-24 08:01:16 556

原创 基于公钥验签实现应用许可机制

随着互联网的普及以及应用的快速发展,商业软件的订阅模式变得越来越流行。软件公司开始提供基于订阅的服务,用户每月或每年支付费用以获取软件的使用权。这种模式使用户可以更灵活地选择服务期限,并且软件公司可以持续提供更新和技术支持。随着“软件定义汽车”的到来,这种模式在智能网联汽车领域也逐渐流行开来!一些需要私有化部署在客户现场的toB商业软件的公司也在探索这种订阅许可证模式,但与toC的软件不同,toB...

2023-10-16 08:01:10 142

原创 Go TLS服务端绑定证书的几种方式

随着互联网的发展,网站提供的服务类型和规模不断扩大,同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)[1]已然成为Web服务最重要的安全基础设施之一。默认情况下,一个TLS服务器通常只绑定一个证书[2],但当服务复杂度增加时,单一证书已然难以满足需求。这时,服务端绑定多个TLS证书就成为一个非常实用的功能。Go语言中的net/http包和tls...

2023-10-14 08:00:50 238

原创 Service Weaver:以单体形式编码,以微服务形式部署

分布式应用的主流架构模式演化为微服务架构已经有些年头了。微服务、DevOps、持续交付和容器技术(k8s)是构成最初云原生概念[1]的核心要素。它们相生相拌,共同演进,并推动了云计算全面进入云原生时代。云原生应用普遍采用微服务架构,遗留的单体应用程序会逐步演进并拆分为多个微服务,新应用则会直接采用微服务架构进行设计与实现。微服务的好处是显而易见的:每个微服务都编译为一个二进制文件并独立部署和扩展,...

2023-10-10 08:02:33 403

转载 程序员+软考证书=王炸!!

????#IT人 #积分落户、升职加薪、领奖金!到底是什么神仙证书吸引众多程序员争相报考?最近发现,软考报考人数已超500万!2020年40万,2021年94万,2022年129万,两年时间直翻3倍!如此火爆原因是什么?据统计:2023上半年不仅报名人数大涨,参考率也同步上升,竞争逐步激烈!软考也叫软件水平考试,IT圈公认的高含金量证书,加上政策福利贼好、市场需求变大,才日渐火热…????软考可考专业多:高...

2023-10-09 13:02:12 134

原创 Go项目目录该怎么组织?官方终于出指南了!

长久以来,在Go语言进阶的学习和实践之路上,Go项目目录究竟如何布局一直是困扰大家的一个问题,这是因为Go官方针对这个问题迟迟没有给出说法,更没有提供标准供大家参考。仅有Go语言项目技术负责人Russ Cox在一个开源项目的issue中给出了他关于Go项目结构的最小标准布局的想法[1]。熟悉我的博客/公众号的读者可能会知道,关于Go项目目录布局,我在以往文章中曾写过多次[2]。在我的纸版书《Go语...

2023-10-06 08:00:44 142

BigPIM

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

2006-03-16

空空如也

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

TA关注的人

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