腾讯 tRPC-Go 教学——(5)filter、context 和日志组件

3 月 4 日
阅读 10 分钟
277
本文咱们来介绍一下在 tRPC 中的 filter 机制、context 用法,以及在相关机制上可以实现的 tracing log 能力。说实话,这一部份是我个人最不喜欢的 tRPC 的实现模式,不过这不妨碍咱们使用它——只要把它封装成让人更为舒服的模式也未尝不可。系列文章腾讯 tRPC-Go 教学——(1)搭建服务腾讯 tRPC-Go 教学——(2)trpc HTTP ...

腾讯 tRPC-Go 教学——(4)tRPC 组件生态和使用

2 月 6 日
阅读 6 分钟
479
之前我花了三篇文章来介绍 tRPC 怎么用。而 tRPC 给开发者带来的便利, 在整整三篇文章中,我也只是介绍了它可以方便服务在 HTTP、trpc、grpc 三种协议之间灵活切换。诚然, tRPC 作为能够统一腾讯内开发框架的一个生态级产品,它的能力显然不止这些。这一篇文章,咱们来一起初窥 tRPC 的周边生态有哪些, 以及其中的第三方...

腾讯 tRPC-Go 教学——(3)微服务间调用

1 月 30 日
阅读 5 分钟
476
前两篇文章(1、2),我构建了一个简单的 HTTP 服务。 HTTP 服务是前后端分离架构中,后端最靠近前端的业务服务。不过纯后台 RPC 之间,出于效率、性能、韵味等等考虑,HTTP 不是我们的首选。本文我们就来看看腾讯是怎么使用 tRPG-Go 构建后台微服务集群的。

腾讯 tRPC-Go 教学——(2)trpc HTTP 能力

1 月 16 日
阅读 5 分钟
514
上一篇文章 中我们快速搭建了一个 http API 服务,并且我们可以看到,对外提供了 URL query 和 application/json 两种服务模式。那么实际上,我们到底实现了什么、并且能够做些什么?读者可能还是没有直观的感受,因此必要先来简单 review 一下。就让我们先放下敲代码的小手,一起看看刚刚写出来的都是些什么玩意儿吧。

腾讯 tRPC-Go 教学——(1)搭建服务

1 月 15 日
阅读 4 分钟
535
2023 年底腾讯统一的 RPC 框架 tRPC 正式开源。遍观全网,似乎大部份是对 tRPC 概念上的宣传、架构上的设计,而如何开发、如何部署的文章凤毛麟角。于是笔者小试牛刀撰此文,或许会成为一系列,希望能抛砖引玉。

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

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

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

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

三分钟, 让你学会 Go 泛型

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

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

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

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

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

Go http.Transport 主要参数说明

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Go 语言 time 包常用用法笔记

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