小米 Go 开发实践——用 Go 构建高性能数据库中间件

前言 在 2019年第五届 Gopher China 大会上,小米科技基础服务高级研发工程师徐成选做了题为《用 Go 构建高性能数据库中间件》的技术演讲,详细介绍了小米开源的数据库中间件 Gaea 的整体架构、内部模块和一些具体实践。以下为演讲实录。 No.0 自我介绍 大家下午好,很荣幸能有这个机会跟大家分享一个用 Go 开发的数据库中间件项目。在之前先做一下自我介绍,我是2015 年年初开始用 Go,最早是用 Python 和 C 比较多,接触 Go 后就立刻喜欢上了这门语言。后来一直用 G...阅读全文

51CTO博客 2021-04-19 22:11:50 mob604756f0bbf4

请给我一篇 Go 工程实践干货 @ Go中国

前言 在 4 月 27 日举办的 Gopher China 2019 中,国内 Go 语言专家,Bilibili 架构师毛剑进行了题为《Go业务基础库之Error & Context》的演讲,主要探讨两个问题: 在业务的基础库中,经常需要针对异常进行处理; 在Go引入context以后,我们如何改造自己的基础库。 本文是他演讲的第二部分——Context 篇,以下为演讲实录。 第二个我们讲上下文,上下文很多地方都在用了,上下文争议非常多。 我们先看背景,我们用上下文到底想解决什么问题?像其他语言...阅读全文

51CTO博客 2021-04-19 22:08:11 mob604756f0bbf4

Bilibili 毛剑:Go 业务基础库之 Error

前言 在 4 月 27 日举办的 Gopher China 2019 中,国内 Go 语言专家,Bilibili 架构师毛剑进行了题为《 Go 业务基础库之 Error & Context 》的演讲,主要探讨两个问题: 在业务的基础库中,经常需要针对异常进行处理; 这次分享针对业务逻辑的异常处理,异常日志记录,异常信息关联, 业务错误码,以及基于Go,error的特点如何来使用解决这类问题; 在Go引入context以后,我们如何改造自己的基础库。 利用context上下文解决元数据传递,超时传...阅读全文

51CTO博客 2021-04-19 22:05:19 mob604756f0bbf4

看看这篇拯救发际线的干货吧--警惕 Go 编程陷阱

在2019年08月17日举办的 Gopher Meetup(深圳站)活动上,来自 Bindo Labs 公司的李雄飞进行了 《Go 编程陷阱》的演讲。李雄飞,Bindo Labs 后端技术负责人,全栈工程师。从事POS/支付业务架构以及通用Web系统建设工作,主要关注New SQL/ETL/Kubernetes等领域技术发展。以下为演讲实录。 前言 我大概是从 2015 年开始写下第一行 Go 代码,今天主要给大家分享我这几年以来所积累的一些让我非常难受地方以及感到崩溃的一些 BUG,我希望我的...阅读全文

51CTO博客 2021-04-19 22:02:18 mob604756f0bbf4

[图文升级版]这家独角兽旅行服务公司,在用 Go 进行微服务治理

本文由 客路 KLOOK 基础架构组高级开发工程师韩金明在 Gopher Meetup 深圳站的演讲整理而成,主要介绍 KLOOK 微服务治理框架的落地实践,包含: 自研配置和注册中心的实现; RPC 落地过程中的实践经验。 No.1 KLOOK 微服务治理实践 简单介绍一下,KLOOK 为旅行者提供简单便捷的自由行玩乐预定,包括全球景点门票、一日游、特色活动、美食、交通及 Wi-Fi。KLOOK 微服治理包括很多东西,此次主要介绍支撑了稳定的服务治理平台的自研配置中心和注册中心的实现,以及 R...阅读全文

51CTO博客 2021-04-19 21:58:39 mob604756f0bbf4

这家独角兽旅行服务公司,在用 Go 进行微服务治理

本文由 客路 KLOOK 基础架构组高级开发工程师韩金明在 Gopher Meetup 深圳站的演讲整理而成,主要介绍 KLOOK 微服务治理框架的落地实践,关注公众号回复KLOOK可得ppt。内容包含: 自研配置和注册中心的实现; RPC 落地过程中的实践经验。 No.1 KLOOK 微服务治理实践 简单介绍一下,KLOOK 为旅行者提供简单便捷的自由行玩乐预定,包括全球景点门票、一日游、特色活动、美食、交通及 Wi-Fi。KLOOK 微服治理包括很多东西,此次主要介绍支撑了稳定的服务治理平台...阅读全文

51CTO博客 2021-04-19 21:55:27 mob604756f0bbf4

TiDB 的 Golang 实践

今天讲一下 Go 在我们 TiDB 的应用。我先自我介绍一下,我2012年自己创业做基础架构方向的创业,但是没有做起来,然后去了360基础架构组搞 MySQL 的开源中间件。后来觉得中间件这个方案是一个会受到限制的方案,于是我们就开始探索可能需要像NewSQL 的东西。再后来发现 TiDB 也在做同样的事情,所以就加入了 TiDB。我今天主要讲 TiDB 从测试到优化。 图1 大家知道做数据库非常难,做单机数据库就已经很艰难了如果做一个分布式的,而且是带SQL、带事务的数据库,更是难上加难。对于...阅读全文

51CTO博客 2021-04-19 21:48:25 mob604756f0bbf4

Go compiler intrinsics(文末赠书)

原文地址: https://dave.cheney.net/2019/08/20/go-compiler-intrinsics 原文作者:Dave Cheney 译文出处:https://dave.cheney.net/ 译者:fivezh、咔叽咔叽 校对者:咔叽咔叽 如有需要,Go 允许使用者通过汇来编写函数。这被称作 stub 或 forward 声明。 package asm // Add returns the sum of a and b. func Add(a int64, b in...阅读全文

51CTO博客 2021-04-19 21:53:13 mob604756f0bbf4

Asta:是什么终结了我的鸽王生涯?Go 1.13 发布!

鸽王自白 此文本该写在 Go1.13 版本发布之前……然而我就是传说中的鸽王,放了司徒很多次鸽子。直到 Go1.13 发布了,没有任何理由再拖延,也正好可以借着这一次新版本的发布介绍一下 Go 语言新特性和 Go Team 的变化,以及未来 Go 到底还会朝着怎么样的方向发展。 Go 1.13 带来的新特性 分析的文章有很多,我就不事无巨细地介绍了,这里重点拿几个我自己比较关心的特性来说一下。 1. Go 命令默认使用 Go module 这也是Golang 1.13最重要的一个更新。环境变量 ...阅读全文

51CTO博客 2021-04-19 21:50:10 mob604756f0bbf4

【GoCN酷Go推荐】Go程序配置利器-viper库

推荐理由 日常开发中,程序配置项会包含多种源,如:配置文件,系统环境变量、分布式config服务等等,常规方式是每种配置源写一套逻辑,虽然开发量不大,但总要花精力去维护后续的变更。Viper库恰好能解决这类痛点,同时还支持多种配置文件格式,以及热加载能力,所以程序配置管理场景可以尝试用Viper库。 功能介绍 Viper具体功能特性如下: 设置配置项默认值 支持显式设置配置项 支持读取JSON、TOML、YAML、HCL、envfile和Java properties等配置格式 支持读取环境变量...阅读全文

51CTO博客 2021-04-19 20:47:33 mob604756f0bbf4

【GoCN酷Go推荐】Go程序配置利器-viper库

推荐理由 日常开发中,程序配置项会包含多种源,如:配置文件,系统环境变量、分布式config服务等等,常规方式是每种配置源写一套逻辑,虽然开发量不大,但总要花精力去维护后续的变更。Viper库恰好能解决这类痛点,同时还支持多种配置文件格式,以及热加载能力,所以程序配置管理场景可以尝试用Viper库。 功能介绍 Viper具体功能特性如下: 设置配置项默认值 支持显式设置配置项 支持读取JSON、TOML、YAML、HCL、envfile和Java properties等配置格式 支持读取环境变量...阅读全文

51CTO博客 2021-04-19 20:47:29 mob604756f0bbf4

Go 开源说第八期:Chaos Mesh® 云原生混沌工程测试平台

本文由“GO开源说”第八期 《Chaos Mesh® 云原生混沌工程测试平台》直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。 本文将先对混沌工程这一概念进行描述,介绍混沌工程的动机和实践方式,并介绍 Chaos Mesh 项目的发展情况。而在后半部分,介绍了 Chaos Mesh 项目本身的架构,作为一个典型 的云原生环境下的软件,同时也涉及到在 Go 的生态环境中对容器等基本概念进行操作,希望 对读者将来类似的技术实践能够有所帮助。 混沌工程概述 现在的技术潮流在向着大规模集群、...阅读全文

51CTO博客 2021-04-19 20:45:44 mob604756f0bbf4

揭秘腾讯内部 Go Modules Proxy 服务

01 背景 近日腾讯正式对外发布 2020 年度《腾讯研发大数据报告》,这份由腾讯技术委员会出品的报告,披露了过去一年腾讯在研发投入、研发效能及开源协同等方面的重要数据。C++ 蝉联腾讯最受欢迎的编程语言。随着云计算和微服务相关技术的进一步发展,Go语言使用次数增速第一,并超越 JavaScript 成为腾讯第二受欢迎的编程语言。基于如此巨大的 Go 开发者基数,内部开发体验就显得尤为重要。 但是长久以来 Go 的版本管理确实是大家开发中遇到最头疼的问题,在 GOPATH 模式中,我们将所需依赖...阅读全文

51CTO博客 2021-04-19 20:42:05 mob604756f0bbf4

【GoCN酷Go推荐】ip2location 解析 IP 地址库

简介 很多时候,我们获取了用户ip,但是想知道更多信息,怎么办?使用ip2location吧。 这个库,可以从IP地址快速查找国家,地区,城市,纬度,经度,邮政编码,时区,ISP,域名,连接类型,IDD代码,地区代码 等各种信息。 它使用IP2Location.com上提供的基于文件的数据库,该数据库是以ip为key,国家/城市/经纬度等信息为value 的一个映射表。 快速使用 步骤如下: 1. IP2Location.com下载文件数据库到本地 1. 加载文件数据库到代码 1. 调用函数获取...阅读全文

51CTO博客 2021-04-19 20:39:02 mob604756f0bbf4

Go 开源说第八期预告:Chaos Mesh——云原生的混沌工程测试平台

写在前面 GoCN开源说是GoCN推出的一档分享Go开源好项目的直播栏目,通过开源说希望能够帮助到开源作者们实现以下目标: 第一是去推广他们的开源项目 第二说说背后的设计原理和理念,产品优越性等 第三让我们用户可以了解到更多好玩有用的项目,避免自己造轮子重复发明 第四当然也希望通过这些分享让大家学习到每一个开源项目背后的设计理念,拥抱开源,做出自己的产品。 回顾地址:https://github.com/gocn/opentalk —— 王博锋 本期开源先锋 杨可奥 https://github...阅读全文

51CTO博客 2021-04-19 20:37:08 mob604756f0bbf4

Go 开源说第六期:基于Apache APISIX构建的Kubernetes Ingress

本文由“GO开源说”第六期 《基于Apache APISIX构建的Kubernetes Ingress》直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。 1.什么是 Kubernetes Ingress Kubernetes Ingress 是⼀个标准,Kubernetes 为了能够让外部请求访问到 Kubernetes 集群内部,并且⽅便集中管理⼊⼝流量,因此有了 Ingress 的概念。我们可以把 Ingress 简单的理解为Kubernetes 集群的⼊⼝⽹关,Ingress ...阅读全文

51CTO博客 2021-04-19 20:35:13 mob604756f0bbf4

【GoCN酷Go推荐】Goroutine 泄漏防治神器 goleak

推荐 goleak 的背景 goroutine 作为 golang 并发实现的核心组成部分,非常容易上手使用,但却很难驾驭得好。我们经常会遭遇各种形式的 goroutine 泄漏,这些泄漏的 goroutine 会一直存活直到进程终结。它们的占用的栈内存一直无法释放、关联的堆内存也不能被 GC 清理,系统的可用内存会随泄漏 goroutine 的增多越来越少,直至崩溃! goroutine 的泄漏通常伴随着复杂的协程间通信,代码评审和常规的单元测试通常更专注于业务逻辑正确,很难完全覆盖 goro...阅读全文

51CTO博客 2021-04-19 20:32:13 mob604756f0bbf4

Go 开源说第七期:Harbor助你玩转云原生

本文由“GO开源说”第七期 《Harbor助你玩转云原生》直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。 云原生技术的兴起为企业数字化转型带来新的可能。作为云原生的要素之一,带来更为轻量级虚拟化的容器技术具有举足轻重的推动作用。其实很早之前,容器技术已经有所应用,而Docker的出现和兴起彻底带火了容器。其关键因素是Docker提供了使用容器的完整工具链,使得容器的上手和使用变得非常简单。工具链中的一个关键,就是定义了新的软件打包格式-容器镜像。镜像包含了软件运行所需要的包含基础O...阅读全文

51CTO博客 2021-04-19 20:29:56 mob604756f0bbf4

Go无缓冲通道的陷阱

定义Channel是go的特色之一,甚至说是最大的特色也不为过,使用起来也非常简单。 首先定义一个int类型的channel:ch1 := make(chan int) ch2 := make(chan int, 10)我们这里主要关注无缓冲通道。场景来看看这段代码:package mainimport ( "sync" "fmt")func main() { wg := sync.WaitGroup{} ch1 := make(chan int) wg.Add(1) for i := 0; i...阅读全文

51CTO博客 2021-04-19 19:58:53 mob604756f0e582