Web Analytics

Go,15岁了[译]

Go,15岁了[译] | Tony Bai Tony Bai一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ 关于我 文章列表 Go,15岁了[译] 十一月 12, 2024 0 条评论 ...

November 12, 2024 · 6 min · Tony Bai

代码提交者的代码评审通关指南[译]

本文永久链接 – https://tonybai.com/2024/10/11/the-cl-author-guide-to-getting-through-code-review Google在软件工程领域对IT界做出了卓越的贡献,从《Google软件工程》,到Google Style Guides,再到The Change Author’s Guide。这些实践参考不仅提升了软件工程的标准,也为全球IT行业的发展提供了宝贵的资源和指导。由于Go是Google开源的,其cl review基本上是遵循了Google内部的标准和实践,可以帮助开发人员更快地完成审核并获得更高质量的结果。因此在这篇文章中,我翻译一下The Change Author’s Guide,供大家参考。 ...

October 11, 2024 · 15 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2024/09/18/understand-go-unique-package-by-example Go的1.23版本中引入了一个新的标准库包unique,为Go开发者带来了高效的值interning能力。这种能力不仅适用于字符串类型值,还可应用于任何可比较(comparable)类型的值。 本文将简要探讨interning技术及其在Go中的实现方式,通过介绍unique包的功能,帮助读者更好地理解这一技术及其实际应用。 1. 从string interning技术说起 通常提到interning技术时,指的是传统的字符串驻留(string interning)技术。它是一种优化方法,旨在减少程序中重复字符串的内存占用,并提高字符串比较操作的效率。其基本原理是将相同的字符串值在内存中只存储一次,所有对该字符串的引用都指向同一内存地址,而不是为每个相同字符串创建单独的副本。下图展示了使用和不使用string interning技术的对比: ...

September 18, 2024 · 14 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2023/12/10/go-changes 自从Go语言之父Rob Pike从Google退休并隐居澳洲后,Russ Cox便成为了Go语言团队的“带头大哥”,虽然其资历还无法与依旧奋战在一线的另外一位Go语言之父Robert Griesemer相比。如今,Russ Cox对Go语言未来的演化发展是很有“发言权”的,Go module的引入便是Russ Cox的重要决策之一。从Go社区来看,这些年来,以Russ Cox为首的Go团队对Go演进决策总体上是良性的、受欢迎的,比如Go module、Go泛型、Go对wasm的支持等,当然也有一些变化是受到质疑的,比如:Go 1.22版本很可能从试验特性到正式特性的loopvar等。 ...

December 10, 2023 · 18 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2023/12/03/understand-api-gateway-main-functional-features-by-example 在当今的技术领域中,“下云”的概念正逐渐抬头,像David Heinemeier Hansson(37signals公司的联合创始人, Ruby on Rails的Creator)就直接将公司所有的业务都从公有云搬迁到了自建的数据中心中。虽说大多数企业不会这么“极端”,但随着企业对云原生架构采用的广泛与深入,不可避免地面临着对云服务的依赖。云服务在过去的几年中被广泛应用于构建灵活、可扩展的应用程序和基础设施,为企业提供了许多便利和创新机会。然而,随着业务规模的增长和数据量的增加,云服务的成本也随之上升。企业开始意识到,对云服务的依赖已经成为一个值得重新评估的议题。云服务的开销可能占据了企业可用的预算的相当大部分。为了保持竞争力并更好地控制成本,企业需要寻找方法来减少对云服务的依赖,寻找更经济的解决方案,同时确保仍能获得所需的性能、安全性和可扩展性。 ...

December 3, 2023 · 26 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2023/11/08/understand-go-web-secret-management-by-example 如果你是一个Web应用系统的开发人员,你的日常大概率是“乐此不疲”地做着CRUD的活儿,很少接触到安全方面的内容。如果这时有人和你提到“机密(信息)管理(secret management)”,你大概率会说:那是啥?和我有关系吗? ...

November 8, 2023 · 33 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2023/11/04/understand-go-web-authz-by-example 在前面的系列文章中,我们了解了Go Web应用身份认证的几种方式,也知道了该如何相对安全地存储用户的密码信息,最大程度减小在系统数据库被攻破时用户密码信息的泄露程度。 一旦用户通过身份验证,他/她就可以以合法的身份进入到系统中,那么问题来了:用户进入系统后是否就可以“为所欲为”了呢?显然不是! 比如我们以普通用户身份登录github,身份验证成功后,我们只能增删改自己账号下的代码仓库数据或读取其他用户的公开仓库(public)数据,我们无法修改和删除其他用户下面的仓库数据,甚至看不到其他用户的私有仓库。Web应用系统(比如github)的这种对用户可以使用什么功能、可以访问和修改哪些数据的管理和控制,就是授权(Authorization),简称为AuthZ。 ...

November 4, 2023 · 31 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2023/10/23/understand-go-web-authn-by-example 在2023年Q1 Go官方用户调查报告中,API/RPC services、Websites/web services都位于使用Go开发的应用类别的头部(如下图): ...

October 23, 2023 · 29 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2023/10/09/service-weaver-coding-in-monolithic-deploy-in-microservices 分布式应用的主流架构模式演化为微服务架构已经有些年头了。微服务、DevOps、持续交付和容器技术(k8s)是构成最初云原生概念的核心要素。它们相生相拌,共同演进,并推动了云计算全面进入云原生时代。 云原生应用普遍采用微服务架构,遗留的单体应用程序会逐步演进并拆分为多个微服务,新应用则会直接采用微服务架构进行设计与实现。微服务的好处是显而易见的: ...

October 9, 2023 · 24 min · Tony Bai

slog正式版来了:Go日志记录新选择!

本文永久链接 – https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go 在大约一年前,我就写下了《slog:Go官方版结构化日志包》一文,文中介绍了Go团队正在设计并计划在下一个Go版本中落地的Go官方结构化日志包:slog。但slog并未如预期在Go 1.20版本中落地,而是在golang.org/x/exp/slog下面给出了slog的初始实现供社区体验。 ...

September 1, 2023 · 9 min · Tony Bai