每天学点 Go 规范 - 代码不能写太宽,那么函数该怎么换行呢?

今天 12:10
阅读 4 分钟
9
公司内部的 Go 代码规范中限制了每一行代码的宽度。为了满足这个规范,那些太宽的代码行就不可避免地需要换行。换行不是普通的回车就行,如何在换行的同时,保持代码优秀的可读性,笔者根据日常 code review 中看到的各种模式,提出一些建议。

逆微服务潮流?基于腾讯 tRPC-Go 单体化改造怎么节省上万核 CPU

11 月 8 日
阅读 6 分钟
95
但是在快速部署的时候,有时候,我们可能需要一些宏服务的优势。有没有一种方法,能够 “既要又要” 呢?本文基于 tRPC-Go 服务,提出并最终实践了一种经验证可行的方法。
封面图

三分钟, 让你学会 Go 泛型

10 月 26 日
阅读 5 分钟
167
Go 自从 1.18 版本正式推出泛型之后至今也超过半年了,但是笔者发现在实际业务开发中,大家没有如想象中那么广泛地使用泛型。于是决定简单撰一文,尽可能简单地讲解 Go 的泛型代码的写法。
封面图

每天学点 Go 规范 - 函数传参时,struct 应该传值还是引用

8 月 26 日
阅读 3 分钟
867
现在团队里几乎所有的代码都需要经过 Code Review(代码审查)之后才允许合入主分支。笔者在 CR 中看到了不少不适合的问题,也看到了不少值得学习的点,于是决定一点一滴地记录这些做法、经验、教训,以飨读者。如有错误,也欢迎读者不吝指正。
封面图

每天学点 Go 规范 - context 类型的 key 有什么讲究?

8 月 16 日
阅读 3 分钟
963
现在团队里几乎所有的代码都需要经过 Code Review(代码审查)之后,才允许合入主分支。作为 CR 负责人之一,在 CR 中看到了不少不适合的问题,也看到了不少值得学习的点。笔者决定从今天开始,一点一滴地记录这些做法、经验、教训,以飨读者。
封面图

Go http.Transport 主要参数说明

6 月 3 日
阅读 2 分钟
1.8k
在 Go 中创建一个 http client 时,一般会使用 Go http 包的 Transport 类型。本文主要说明 http.Transport 需要关注的主要参数。
封面图

JSON 这么可爱,让我们用千字短文吃透它吧!

2022-10-21
阅读 6 分钟
2k
JSON,一个伟大的协议,前端工程师的卓越发明!相信 99% 的程序员都认识 JSON,它作为前后端交互的热门协议,因其易理解、简单、灵活和超强的可读性,得到了互联网的广泛欢迎,甚至很多微服务之间的传输协议中也得到应用。

作为 Gopher,你知道 Go 的注释即文档应该怎么写吗?

2022-03-24
阅读 7 分钟
2.5k
点击徽章,就可以打开 https://pkg.go.dev/ 的网页,网页中给出了这个开源项目所对应的 Go 文档。在刚接触 Go 的时候,我一度以为,pkg.go.dev 上面的文档是需要开发者上传并审核的——要不然那些文档咋都显得那么专业呢。

Yaegi,让你用标准 Go 语法开发可热插拔的脚本和插件

2021-10-28
阅读 6 分钟
8.2k
Go 作为一种编译型语言,经常用于实现后台服务的开发。由于 Go 初始的开发大佬都是 C 的老牌使用者,因此 Go 中保留了不少 C 的编程习惯和思想,这对 C/C++ 和 PHP 开发者来说非常有吸引力。作为编译型语言的特性,也让 Go 在多协程环境下的性能有不俗的表现。

如何在 Go 中优雅的处理和返回错误(1)——函数内部的错误处理

2021-09-30
阅读 4 分钟
3.6k
在使用 Go 开发的后台服务中,对于错误处理,一直以来都有多种不同的方案,本文探讨并提出一种从服务内到服务外的错误传递、返回和回溯的完整方案,还请读者们一起讨论。

手把手教你用 reflect 包解析 Go 的结构体 - Step 3: 复杂类型检查

2021-09-18
阅读 7 分钟
5.6k
上一篇文章我们完成了对结构体中基本数据类型的解析。这一篇文章,则是真正令人头疼的、在前两篇文章未处理的几个主题了:匿名成员结构体中嵌套结构体Go 切片Go 数组Go map结构体中的匿名成员我们回来看一下上一篇文章中的 marshalToValues 函数,其中有一行 “ft.Anonymous”: {代码...} 前文提过,这表示当前的字段是一...

手把手教你用 reflect 包解析 Go 的结构体 - Step 2: 结构体成员遍历

2021-07-10
阅读 6 分钟
2.8k
上一篇文章我们学习了如何用 reflect 检查一个参数的类型。这一篇文章,咱们获得了一个结构体类型,那么我们需要探究结构体内部的结构以及其对应的值。

手把手教你用 reflect 包解析 Go 的结构体 - Step 1: 参数类型检查

2021-07-10
阅读 5 分钟
4.1k
Go 原生的 encoding/json 的 Unmarshal 和 Marshal 函数的入参为 interface{},并且能够支持任意的 struct 或 map 类型。这种函数模式,具体是如何实现的呢?本文便大略探究一下这种实现模式的基础:reflect 包。

Go 语言原生的 json 包有什么问题?如何更好地处理 JSON 数据?

2021-05-07
阅读 12 分钟
8.8k
Go 的 “玩家” 们看到这个题目可能会很疑惑——对于 JSON 而言,Go 原生库 encoding/json 已经是提供了足够舒适的 JSON 处理工具,广受 Go 开发者的好评。它还能有什么问题?但是,实际上在业务开发过程中,我们遇到了不少原生 json 做不好甚至是做不到的问题,还真是不能完全满足我们的要求。

Go time 包中的 AddDate 的逻辑避坑指南

2021-03-24
阅读 2 分钟
6.8k
从 C++ 转 Go 后,当操作时间变量的时候,Go 原生的 time 包用起来简直不要太舒服,再也不用自己写轮子了。我之前就写过一篇文章介绍了 time 的常用用法。
封面图

用 Docker 在单台宿主机启动多个 etcd 节点

2021-02-24
阅读 4 分钟
3.8k
在学习和开发基于 etcd 的服务和功能时,需要自己在本地部署一套 etcd 集群。原以为这是一个简单的事情,但意外地花了我几个小时才搞定……本文介绍有效的部署方法和踩过的一些坑。
封面图

入门 Kafka 你所需要了解的基本概念和开发模式

2020-12-22
阅读 6 分钟
2.3k
团队在日常工作中,一般情况下使用的消息队列是腾讯云 CKafka。CKafka 提供了高可靠的开箱即用消息队列能力,让我们在日常能够放心使用,减少花在运维上的投入。不过即便如此,我们还是需要学习 Kafka 的一些基本概念和功能,从而在实际应用中嗯能够充分高效、高质量地利用 Kafka 的能力。

小面试官教你 MySQL——引擎、索引和算法

2020-12-01
阅读 5 分钟
3.9k
我在面试中,经常喜欢针对 MySQL 的知识由浅入深地问下去,了解候选人对 MySQL 知识的了解到了哪一个层级。上一篇文章中的那些知识太基础了,我是不会拿来问的。因此我会问的第一个问题必然是 MySQL 的索引。

小面试官教你 MySQL —— 简介和功能

2020-11-04
阅读 3 分钟
2.6k
MySQL 是我们作为后台开发中非常重要的软件。前段时间作为面试官,面试了几位后台开发的候选人——MySQL 的知识由浅入深一路问下去,并没有人能够完整地回答出来。

还在用 map[string]interface{} 处理 JSON?告诉你一个更高效的方法——jsonvalue

2020-08-10
阅读 7 分钟
15.6k
本文介绍的是 jsonvalue 库,这是我个人在 Github 上开发的第一个功能比较多而全的 Go 库。目前主要是在腾讯未来社区的开发中使用,用于取代 map[string]interface{}。

用 etcd/raft 组建能够选举的最简集群 demo

2020-07-06
阅读 6 分钟
3k
当今互联网行业中,对于分布式一致性算法,个人觉得实用性最高并且应用最广泛的就是 Raft 算法了。Raft 非常适合用于所有的节点均为可信节点时的必要数据同步场景中。Raft 的基本原理理解起来并不难,网上很多文字简介,都不如一个很生动的动画来得直观。

JSON 序列化中的转义和 Unicode 编码

2020-05-31
阅读 2 分钟
15k
其实这是我上一篇文章的姊妹篇。在研究 Unicode 颜文字的时候,由于我们的数据传输是通过 JSON 串来完成的,在对颜文字进行转码传输的过程中,也发现了一个问题。解决问题之后,便有了本总结文。

Unicode 颜文字(emoji)格式和 Go 代码处理

2020-03-22
阅读 5 分钟
9.6k
前几天时间测试同学在我们的前端输入了颜文字,之后软件就出 bug 了。借修 bug 机会我花了点时间学习了一下 Unicode 颜文字(emoji)的一些知识。本文记录我对 emoji 的一些认识,并且简单介绍一下我为此而做的一个 Go 语言颜文字提取库的用法。

如何写高大上的 godoc(Go 文档)

2019-11-08
阅读 5 分钟
12.8k
点击徽章,就可以打开 godoc.org 的网页,网页中给出了这个开源项目所对应的 Go 文档。作为 Go 语言的新手,我一度以为,godoc.org 上面的文档是需要开发者上传并审核的——要不然那些文档咋都显得那么专业呢。

Go 语言 time 包常用用法笔记

2019-11-08
阅读 4 分钟
11.6k
Go 的时间操作基本上都用 time 包,比 C 的 time 函数和 timeval 等 struct 好用多了。不过 time 包还是有不少用法和其他语言不同的,所以有必要写个笔记记录一下。

MySQL/MariaDB 语句速查笔记

2019-07-04
阅读 2 分钟
2.3k
平时实际开发的时候,其实并不太依赖 MySQL 作为 关系型数据库 中的 “关系” 这一属性,更多地只是把 MySQL 作为数据存储的介质。因此 MySQL 语句其实很少写,所以本文用于记录一些 MySQL 在常规数据操作中的常用语法,备查。少用或者不用的知识就不列了。

腾讯 Tars Web 管理端用户体系对接

2019-07-03
阅读 4 分钟
4k
这段时间一直在基于 Tars 作开发。最近的文章也多是针对 Tars 的一些学习笔记。前面我们搭建了 Tars 基础框架,打开了 Tars web 管理界面进行服务的运维操作。不过读者肯定很快就会发现:这好像不用登录啊,那怎么保证只有有权限的用户才能更改服务呢?

腾讯 Tars-Go 服务获取自定义模版(配置)值

2019-02-25
阅读 5 分钟
4.7k
腾讯 Tars 框架中,有两种可以称之为 “配置” 的地方:其中一个是可以自定义的,在 Tars 管理页面中称为 “服务配置”。在这里,可以按照开发者喜欢的格式上传文件,并且支持配置的热更新。

腾讯 Tars-Go 服务 Hello World——从 HTTP 开始

2019-01-12
阅读 5 分钟
7.5k
本人上一篇文章《腾讯 Tars 基础框架手动搭建》简单介绍了 Tars 框架及其搭建方法。在我们的实际应用中,目前基于 Taf / Tars,主要采用 Node.js 和 C++ 进行开发。对于 C++ 程序员来说,目前最热门的后台开发语言莫过于 Google 的 Go。Tars 框架最新的版本已经把内部的 Taf-Go 开源为 Tars-Go。作为与时俱进的程序员,...

腾讯 Tars 基础框架手动搭建——填掉官方 Guide 的坑

2018-12-22
阅读 11 分钟
7.9k
腾讯 Tars 是腾讯内部使用的 TAF(Tencent Application Framework)的对外开源版,去掉了许多冗杂多余的部分。该框架集开发、运维、微服务、RPC 等为一体。对程序员而言,这就是一个能够快速搭建整个微服务体系的开发框架。这个框架支持基于 C++、Node.js、PHP、Java 等语言开发,最新版本已经支持后台开发语言新贵——Go。