- 博客(738)
- 资源 (1)
- 收藏
- 关注
原创 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 961
原创 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 1072 1
原创 依赖Kafka的Go单元测试例解
Kafka[1]是Apache基金会开源的一个分布式事件流处理平台,是Java阵营(最初为Scala)中的一款杀手级应用,其提供的高可靠性、高吞吐量和低延迟的数据传输能力,让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。在日常开发Go程序时,我们经常会遇到一些依赖Kafka的代码[2],如何对这些代码进行测试,尤其是单测是摆在Go开发者前面的一个现实问题!有人说用moc...
2024-01-09 08:00:43 1109
原创 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 891
原创 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 983
原创 2023年Go语言盘点:稳中求新,稳中求变
时光荏苒,转眼间已经是2023年的最后一天了。《2022年Go语言盘点:泛型落地,无趣很好,稳定为王[1]》仿佛就写在昨天。回首这一年,全球彻底从新冠大流行中得以复苏,Go语言也不例外,最直观的表现就是全球各地的GopherCon技术大会或小型Meetup都纷纷从停办/线上的状态来到了线下,并获得Gopher们的热烈欢迎和踊跃参与,比如下图中的GopherCon[2]、GopherCon UK[3...
2023-12-31 13:39:53 6173 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 1202
原创 通过实例理解OpenID身份认证
在《通过实例理解OAuth2[1]》一文中,我们以实例方式讲解了OAuth2授权码模式(Authorization Code)模式的工作原理。实例中的照片冲印服务经过用户(tonybai)的授权后,使用用户提供的code(实则是由授权服务器分配并通过用户的浏览器重定向到照片冲印服务的)到授权服务器换取了access token,并最终使用access token从云盘系统中读取到了用户的照片信息。...
2023-12-23 08:01:55 1070
原创 通过实例理解OAuth2授权
在之前的《通过实例理解Go Web身份认证的几种方式[1]》和《通过实例理解Web应用授权的几种方式[2]》两篇文章中,我们对Web应用身份认证(AuthN)和授权(AuthZ)的几种方式做了介绍并配以实例增强理解。在现实世界中,还有一大类的认证与授权是在前面的文章中没有作为重点介绍的,那就是OAuth2授权[3]与基于OAuth2之上的OpenID身份认证(OIDC, OpenID Connec...
2023-12-16 12:00:36 911
转载 2024线下活动全面启动,1月6日深圳站不见不散~
亲爱的 gopher们,非常激动地宣布:2024年我们将全面启动一系列令人期待的线下活动!我们不仅将在北京、上海、深圳、武汉、成都、杭州、广州、西安等城市举办 meetup,还将在北京和上海举办备受瞩目的 GopherChina 大会。在此,我们开放2024议题征集通道,欢迎各位有实战经验、独特观点的小伙伴勇跃分享~议题提交扫这里~2024开年第一场 meetup 将由 GoCN 社区联合 Aft...
2023-12-15 08:02:44 87
原创 简单之道
已经退居二线的Go语言之父Rob Pike近日发表了一篇名为“Simplicity”[1]的博文,记述了2009年在Google内部一次圆桌会议上发表的演讲内容。Pike老先生在这个时间点发表这篇文章究竟有何深意呢?是对Go语言演进的路线[2]有所不满吗?我们不得而知。不过,这篇文章的内容却是非常值得我们学习,这里我简单翻译一下,供大家参考。2009年5月,Google举办了一次内部的“设计巫术(...
2023-12-12 08:00:35 934
原创 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 872
原创 有效表达软件架构的最小图集
无论你是专职的软件架构师,还是在团队内兼职充当软件架构师角色的开发人员,一旦你处在软件架构师这个位置上,你自然就会遇到软件架构设计的三个困惑:如何更深刻地理解业务;如何更正确地取舍(包括技术性和业务性的);如何更有效地表达软件架构。以上每个困惑展开来写都够写一本书的。而在这篇文章中,我仅聚焦最后一个困惑,聊聊我心目中表达软件架构的有效方式 -- 最小图集(Minimum Diagram Set)。...
2023-12-07 08:00:28 779
原创 通过实例理解API网关的主要功能特性
在当今的技术领域中,“下云”的概念正逐渐抬头,像David Heinemeier Hansson[1](37signals公司的联合创始人, Ruby on Rails的Creator)就直接将公司所有的业务都从公有云搬迁到了自建的数据中心[2]中。虽说大多数企业不会这么“极端”,但随着企业对云原生架构采用的广泛与深入,不可避免地面临着对云服务的依赖。云服务在过去的几年中被广泛应用于构建灵活、可扩...
2023-12-03 18:00:38 970
原创 一文搞懂Go gRPC服务Handler单元测试
在云原生时代和微服务架构背景下,HTTP和RPC协议成为服务间通信和与客户端交互的两种主要方式。对于Go语言而言,标准库提供了net/http/httptest包,为开发人员提供了便捷的方式来构建服务端HTTP Handler单元测试的测试脚手架代码,而无需真正建立HTTP服务器,让开发人员可以聚焦于对Handler业务逻辑的测试。比如下面这个示例://grpc-test-examples/ht...
2023-11-25 08:00:31 886
原创 通过实例理解Web应用跨域问题
在开发Web应用的过程中,我们经常会遇到所谓“跨域问题(Cross Origin Problem)”。跨域问题是由于浏览器的同源策略(Same-origin policy)[1]导致的,它限制了不同源(Origin:域名、协议或端口)之间的资源交互。在这篇文章中,我将通过一些具体的示例来把跨域问题以及主流解决方法说清楚,供大家参考。1. 什么是跨域问题跨域问题指的是当一个Web应用程序在访问另一个...
2023-11-20 08:00:41 79
原创 关系代数、SQL语句和Go语言示例
近些年,数据库领域发展日新月异,除传统的关系型数据库外,还出现了许多新型的数据库,比如:以HBase、Cassandra、MongoDB为代表的NoSQL数据库,以InfluxDB、TDEngine为代表的时序数据[1]库,以Neo4J、Dgraph为代表的图数据库,以Redis、Memcached等为代表的内存数据库,以Milvus为代表的向量数据库,以CockroachDB、TiDB为代表的H...
2023-11-15 08:00:25 437 1
原创 通过实例理解Web应用的机密管理
如果你是一个Web应用系统的开发人员,你的日常大概率是“乐此不疲”地做着CRUD[1]的活儿,很少接触到安全方面的内容。如果这时有人和你提到“机密(信息)管理(secret management)”,你大概率会说:那是啥?和我有关系吗?你只是大多应用系统开发人员中的一个典型代表。现阶段,很多开发人员,尤其是业务应用开发人员在工作中较少甚至没有接触过专门的机密管理系统,在系统设计时也较少考虑到机密管...
2023-11-08 08:01:00 97
原创 通过实例理解Web应用授权的几种方式
预告:下周一会发一个软文,大家担待一下,高低忍一忍在前面的系列文章中,我们了解了Go Web应用身份认证的几种方式[1],也知道了该如何相对安全地存储用户的密码信息[2],最大程度减小在系统数据库被攻破时用户密码信息的泄露程度。一旦用户通过身份验证,他/她就可以以合法的身份进入到系统中,那么问题来了:用户进入系统后是否就可以“为所欲为”了呢?显然不是! 比如我们以普通用户身份登录github,身份...
2023-11-05 08:00:21 236
原创 通过实例理解Web应用用户密码存储方案
在上一篇文章《通过实例理解Go Web身份认证的几种方式》[1]中,我们了解了Web应用的多种身份验证方式。但无论哪种方式,用户初次访问Web应用的注册流程和登录流程是不可避免的,而基于用户名密码的注册流程依旧是当今主流。注册后,Web应用后端是如何保存用户密码的呢?历史上都有哪些存储方案?当今的主流存储方案又是什么呢?在这篇文章中,我们就来说说Web应用的各种密码存储方案的优缺点,并通过实例来理...
2023-10-26 08:00:17 105
原创 通过实例理解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 414
原创 基于公钥验签实现应用许可机制
随着互联网的普及以及应用的快速发展,商业软件的订阅模式变得越来越流行。软件公司开始提供基于订阅的服务,用户每月或每年支付费用以获取软件的使用权。这种模式使用户可以更灵活地选择服务期限,并且软件公司可以持续提供更新和技术支持。随着“软件定义汽车”的到来,这种模式在智能网联汽车领域也逐渐流行开来!一些需要私有化部署在客户现场的toB商业软件的公司也在探索这种订阅许可证模式,但与toC的软件不同,toB...
2023-10-16 08:01:10 123
原创 Go TLS服务端绑定证书的几种方式
随着互联网的发展,网站提供的服务类型和规模不断扩大,同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)[1]已然成为Web服务最重要的安全基础设施之一。默认情况下,一个TLS服务器通常只绑定一个证书[2],但当服务复杂度增加时,单一证书已然难以满足需求。这时,服务端绑定多个TLS证书就成为一个非常实用的功能。Go语言中的net/http包和tls...
2023-10-14 08:00:50 181
原创 Service Weaver:以单体形式编码,以微服务形式部署
分布式应用的主流架构模式演化为微服务架构已经有些年头了。微服务、DevOps、持续交付和容器技术(k8s)是构成最初云原生概念[1]的核心要素。它们相生相拌,共同演进,并推动了云计算全面进入云原生时代。云原生应用普遍采用微服务架构,遗留的单体应用程序会逐步演进并拆分为多个微服务,新应用则会直接采用微服务架构进行设计与实现。微服务的好处是显而易见的:每个微服务都编译为一个二进制文件并独立部署和扩展,...
2023-10-10 08:02:33 362
转载 程序员+软考证书=王炸!!
????#IT人 #积分落户、升职加薪、领奖金!到底是什么神仙证书吸引众多程序员争相报考?最近发现,软考报考人数已超500万!2020年40万,2021年94万,2022年129万,两年时间直翻3倍!如此火爆原因是什么?据统计:2023上半年不仅报名人数大涨,参考率也同步上升,竞争逐步激烈!软考也叫软件水平考试,IT圈公认的高含金量证书,加上政策福利贼好、市场需求变大,才日渐火热…????软考可考专业多:高...
2023-10-09 13:02:12 116
原创 Go项目目录该怎么组织?官方终于出指南了!
长久以来,在Go语言进阶的学习和实践之路上,Go项目目录究竟如何布局一直是困扰大家的一个问题,这是因为Go官方针对这个问题迟迟没有给出说法,更没有提供标准供大家参考。仅有Go语言项目技术负责人Russ Cox在一个开源项目的issue中给出了他关于Go项目结构的最小标准布局的想法[1]。熟悉我的博客/公众号的读者可能会知道,关于Go项目目录布局,我在以往文章中曾写过多次[2]。在我的纸版书《Go语...
2023-10-06 08:00:44 118
原创 聊聊Go与依赖注入
如果你读过Robert C. Martin[1]的《敏捷软件开发:原则、模式与实践》[2](书的封皮见下图),那么你一定知道经典的SOLID设计原则[3]中的“D”:依赖倒置原则(Dependency Inversion Principle, DIP)。依赖倒置原则是面向对象设计中的基本原则之一,它阐述了高层模块和低层模块的依赖关系应该倒置(如下图),也就是:高层模块不应该依赖低层模块,二者都应该...
2023-09-28 08:03:15 271
原创 聊聊Go语言的向前兼容性和toolchain规则
Go语言在发展演进过程中一直十分注重向后兼容性(backward compatibility),在Go 1.0版本发布[1]之初就发布了Go1兼容性承诺[2],简单来说就是保证使用新版本Go(比如Go 1.21版本[3])可以正常编译和运行老版本的Go代码(比如使用Go 1.18版本[4]语法编写的go代码),不会出现breaking change(其实也不是绝对的不会出现[5])。但是在Go 1...
2023-09-11 08:02:34 860
转载 全网独一份!GPT+AI大模型资源...(待会删)
随着ChatGPT热度不断????“AI大模型”连续登上圈内话题榜首!Google、阿里、腾讯等各大互联网公司,无不在布局人工智能技术和市场,甚至还有60k*16的高薪,挖掘AI大模型人才!作为普通程序员,想切入大热的AI领域,却找不到方向?!????上市公司@知乎特邀行业大佬联合发起:AI大模型公开课已为本号粉丝开通免费领取权限预计24小时后关闭通道!速进!AI大模型-重塑程序员核心竞争力(不限年龄!...
2023-09-09 08:00:10 55
原创 slog实战:文件日志、轮转与kafka集成
《slog正式版来了:Go日志记录新选择![1]》一文发布后,收到了很多读者的反馈,意见集中在以下几点:基于slog如何将日志写入文件slog是否支持log轮转(rotation),如果slog不支持,是否有好的log轮转插件推荐?如何与kafka集成日志输出有哪些最佳实践这篇文章就是对上述问题进行补充说明的,供大家参考,希望能给大家带去帮助。1. 输出日志到文件之所以《slog正式版来了:Go日...
2023-09-04 08:05:03 892
原创 slog正式版来了:Go日志记录新选择!
在大约一年前,我就写下了《slog:Go官方版结构化日志包[1]》一文,文中介绍了Go团队正在设计并计划在下一个Go版本中落地的Go官方结构化日志包:slog[2]。但slog并未如预期在Go 1.20版本[3]中落地,而是在golang.org/x/exp/slog下面给出了slog的初始实现供社区体验。时光飞逝,slog在golang.org/x/exp/slog下经历了1年多时间的改善和演进...
2023-09-02 08:03:06 802
原创 编译Go应用的黑盒挑战:无源码只有.a文件,你能搞定吗?
上周末,一个Gopher在微信上与我交流了一个有关Go程序编译的问题。他的述求说起来也不复杂,那就是合作公司提供的API包仅包括golang archive(使用go build -buildmode=archive构建的.a文件),没有Go包的源码。如何将这个.a链接到项目构建出的最终可执行程序中呢?对于C、C++、Java程序员来说,仅提供静态链接库或动态链接库[1](包括头文件)、jar包而...
2023-08-31 08:01:59 99
转载 付费搞来的!知乎内部AI学习资源,本号粉丝限时免费!
近几年AI发展迅猛,行业巨头争先布局AI领域!想切入大热的AI领域,却找不到方向?为了帮助大家零成本学习AI大模型技术,特邀一线大佬发起——AI大模型公开课!????AI大模型进阶之旅!直播时间8月31日晚20:00直播内容大模型的发展历程与训练方法解析AI技术应用场景如何用LangChain、Fine-tuning 定制你的专属大模型应用借助大模型技术提高收入的可能性……直播方式2天直播+直播互动...
2023-08-30 08:00:27 318 1
原创 Go 1.21中值得关注的几个变化
美国时间2023年8月8日,Go团队在Go官博上正式发布了1.21版本[2]!早在今年4月末,我就撰写了文章《Go 1.21新特性前瞻[3]》,对Go 1.21可能引入的新特性、新优化和新标准库包做了粗略梳理。在6月初举办的GopherChina 2023大会上[4],我又以“The State Of Go 2023”为题目给大家分享了Go 1.21版本的当前状态:那么以上分享的内容在Go 1.2...
2023-08-21 08:00:39 758
转载 (待会删)yyds!疯传全网的AI资源,请低调使用!
随着ChatGPT的火热出圈,AI大模型在全球掀起一轮开发浪潮!Google、百度、腾讯等各个科技公司,都在高薪挖掘AI大模型人才!AI大热,这一次,你仍然在迷茫中观望吗?大多数程序员——不熟悉AI领域发展,找不到自己的职业坐标;想要入手系统学习 AI,算法基础还并不扎实,模型背后的数学原理没有太深的了解……????如何深入了解AI发展趋势????如何用LangChain定制你的专属大模型应用????如何借助...
2023-08-16 08:02:09 66
原创 Go项目初始化不再困扰你:gonew全方位解析
近日,Go官博介绍了一个名为gonew的新工具[1]。该工具支持基于go project template clone并创建一个属于你的Go项目。gonew工具的引入大幅简化了Go项目的创建,同时由于对自定义项目模板的支持,也可以提高Go项目的标准化水平。gonew工具刚刚被放入Go工具项目代码仓库[2],目前还处于实验阶段,后续可能会增加新特性,但当前的核心特性(core functionali...
2023-08-12 08:00:36 277
原创 Gopher Daily改版了
已经记不得GopherDaily是何时创建的了,翻了一下GopherDaily项目[1]的commit history,才发现我的这个个人项目是2019年9月创建的,最初内容组织很粗糙[2],但我的编辑制作的热情很高,基本能坚持每日一发,甚至节假日也不停刊:该项目的初衷就是为广大Gopher带来新鲜度较高的Go语言技术资料。项目创建以来得到了很多Gopher的支持,甚至经常收到催刊邮件/私信以及主...
2023-08-06 21:06:57 156
原创 Go语言开发者的Apache Arrow使用指南:读写Parquet文件
Apache Arrow是一种开放的、与语言无关的列式内存格式,在本系列文章[1]的前几篇中,我们都聚焦于内存表示[2]与内存操作[3]。但对于一个数据库系统或大数据分析平台来说,数据不能也无法一直放在内存中,虽说目前内存很大也足够便宜了,但其易失性也决定了我们在特定时刻还是要将数据序列化后存储到磁盘或一些低成本的存储服务上(比如AWS的S3等)。那么将Arrow序列化成什么存储格式呢?CSV、J...
2023-08-01 08:04:07 561
原创 Go语言开发者的Apache Arrow使用指南:扩展compute包
在本系列文章的第4篇《Go语言开发者的Apache Arrow使用指南:数据操作》[1]中我们遇到了大麻烦:Go的Arrow实现居然不支持像max、min、sum这样的简单聚合计算函数:(,分组聚合(grouped aggregation)就更是“遥不可期”。要想对从CSV读取的数据[2]进行聚合操作和分析,我们只能“自己动手,丰衣足食” -扩展Arrow Go实现中的compute包了。不过,...
2023-07-23 08:03:35 178
原创 使用testify包辅助Go测试指南
我虽然算不上Go标准库的“清教徒”,但在测试方面还多是基于标准库testing包以及go test框架的,除了需要mock的时候,基本上没有用过第三方的Go测试框架。我在《Go语言精进之路》[2]一书中对Go测试组织的讲解也是基于Go testing包和go test框架的。最近看Apache arrow代码,发现arrow的Go实现使用了testify项目[3]组织和辅助测试://comput...
2023-07-16 17:00:07 298
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人