详解并发编程基础之原子操作(atomic包)

原文链接:戳这里前言嗨,大家好,我是asong。最近想写一个并发编程系列的文章,使用Go也有一段时间了,但是对并发的理解不是很透彻,借着这次总结,希望能更进一步。我们以"原子操作"开篇,对于并发操作而言,原子操作是个非常现实的问题,比较典型的应用的就是i++操作,并发情况下,同时对内存中的i进行读取,就会产生与预期不符的结果,所以Go语言中的sync/atomic就是解决这个问题的,接下来我们一起来看一看Go的原子操作。什么是原子性、原子操作原子(atomic)本意是"不能被进一步分割的最小粒子...阅读全文

Segmentfault 2021-02-02 15:32:36 .container .car 等

[js go]centos安装docker和mongodb

安装docker为go操作mongodb做准备, 安装mongodb, 在经历各种exit code以后, 决定使用docker来安装mongodb, btw mongo也用js哦# 使用国内 daocloud 一键安装命令$ curl -sSL https://get.daocloud.io/docker | sh复制代码docker安装mongoddb$ docker images# 查看可用版本$ docker search mongo# 拉取官方的最新版本的镜像$ docker pull...阅读全文

51CTO博客 2021-02-01 12:59:07 mb6013c3565bec6

使用 go-randgen 测试 join 查询

在数据库的查询中,join 是最常用的查询之一,由于 join 算法实现的复杂性,出现问题的概率较大,我们对 TiDB 中出现过的 join 问题进行分析,将易发生问题的场景归为如下几类 :相同的 join 查询,join key 为不同的数据类型在分区表上进行 join相同的 join 查询,不同的 join 实现算法特殊的查询条件我们从这些场景入手,在过去的几个月,使用 go-randgen 框架对 TiDB 进行测试。下文将对go-randgen 测试框架,及我们测试工作中的相关内容进行详...阅读全文

51CTO博客 2021-02-01 10:45:15 mb6013c3565bec6

使用 go-randgen 测试 join 查询

在数据库的查询中,join 是最常用的查询之一,由于 join 算法实现的复杂性,出现问题的概率较大,我们对 TiDB 中出现过的 join 问题进行分析,将易发生问题的场景归为如下几类 :相同的 join 查询,join key 为不同的数据类型在分区表上进行 join相同的 join 查询,不同的 join 实现算法特殊的查询条件我们从这些场景入手,在过去的几个月,使用 go-randgen 框架对 TiDB 进行测试。下文将对go-randgen 测试框架,及我们测试工作中的相关内容进行详...阅读全文

51CTO博客 2021-02-01 10:43:21 mb6013c3565bec6

mysql事务的实现原理

此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,在了解这些之前我们先对mysql在执行的过程中 有一个整体的认识,如下图如上图所示,MySQL服务器逻辑架构从上往下可以分为三层:(1)第一层:处理客户端连接、授权认证等。(2)第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。(3)第三层:存储引擎,负责MySQL中数据的存储和提取。MySQL中服务器层不管理事务,事务是由存储引擎实现的。MySQL支持事...阅读全文

Segmentfault 2021-02-02 09:32:35 .container .car 等

我的golang error 最佳实践

背景在完成API接口、公共包给他人使用等类似工作时,除了对外提供功能外,文档也是非常重要的内容。文档输出的是可复制的能力,使用者通过文档快速学习了解使用,而不用多次找到开发人员重复答疑。其中问的最多最频繁的就是错误码定义了,通常是需要给出所有返回错误的文档。本文将分享我golang中error最佳实践,该实践不仅编码非常简单,而且做到了代码即文档,写完就自动生成了交付文档。直接上代码package api import ( "fmt" "runtime" "strconv" "strings" ...阅读全文

51CTO博客 2021-02-01 10:14:03 mb6013c3565bec6

Go 错误处理:用 panic 取代 err != nil 的模式

前段时间我分享了文章 《先睹为快,Go2 Error 的挣扎之路》后,和一位朋友进行了一次深度交流,他给我分享了他们项目组对于 Go 错误处理的方式调整。简单来讲,就是在业务代码中使用 panic 的方式来替代 “永无止境” 的 if err != nil。这就是今天本文的重点内容,我们一起来看看是怎么做,又有什么优缺点。为什么想替换在 Go 语言中 if err != nil 写的太多,还要管方法声明各种,嫌麻烦又不方便:err := foo() if err != nil { //do so...阅读全文

51CTO博客 2021-02-01 10:16:57 mb6013c3565bec6

Go 并发:一些有趣的现象和要避开的 “坑”

大家好,我是煎鱼。最近在看 Go 并发相关的内容,发现还是有不少细节容易让人迷迷糊糊的,一个不小心就踏入深坑里,且指不定要在上线跑了一些数据后才能发现,那可真是太人崩溃了。今天来分享几个案例,希望大家在编码时能够避开这几个 “坑”。案例一演示代码第一个案例来自 @鸟窝 大佬在极客时间的分享,代码如下:func main() { count := 0 wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func() { de...阅读全文

51CTO博客 2021-02-01 10:15:16 mb6013c3565bec6

微服务实践之分布式定时任务

承接上篇:上篇文章讲到改造 go-zero 生成的 app module 中的 gateway & RPC 。本篇讲讲如何接入 异步任务 以及 log的使用。Delay Job日常任务开放中,我们会有很多异步、批量、定时、延迟任务要处理,go-zero中有 go-queue,推荐使用 go-queue 去处理,go-queue 本身也是基于 go-zero 开发的,其本身是有两种模式:dq : 依赖于 beanstalkd ,分布式,可存储,延迟、定时设置,关机重启可以重新执行,消息会丢失,使用...阅读全文

Segmentfault 2021-02-02 09:32:34 .container .car 等

每个角色都不简单

不知不觉在小组已经呆了三周了,一切看起来都是那么好。却没想到在临近过年的这个时间点,我的工作出了问题。 问题出在我是第6组小组长这个身份上。 我带了4个寒假刚进小组的小朋友。他们很努力也很聪明,我一直以他们为骄傲,这次的尖刀组报名还有以后的利剑组、Golang组我认为他们完全有能力和来的时间比他们久的朋友一块儿去竞争。平时的学习状态以及日常交流也完全没有问题,再加上我想赶阶段的心情比较急切,所有的一切造成的结果就是我很少花时间去和他们进行沟通,问一些心态方面的问题,平时就只是问一下学习上有没有什...阅读全文

简书 2021-02-01 09:32:37 葛梦莹_19强化班

golang 创建型设计模式 原型模式

golang 创建型设计模式 原型模式 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 本系列笔记拟采用golang练习之 原型模式 原型模式(Prototype Pattern)指原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象,属于创建型设计模式。 _ 场景 某多用户业务系统, 提供用户自助注册的功能 用户具有ID, Name, RolList(角色列表)等属性 创建用户时, 需要给用户默认分配"guest" 角色 用户的默认值, 使用json文件进行配置 设计 ...阅读全文

golang 创建型设计模式 建造者模式

golang 创建型设计模式 建造者模式 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 本系列笔记拟采用golang练习之 建造者模式 建造者模式(Builder Pattern)将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示,属于创建型设计模式。 _ 场景 某业务系统, 希望使用SQLQuery类动态构造复杂SQL查询语句 SQLQuery类的各种属性组合情况很多, 因此创建SQLQueryBuilder作为SQLQuery的建造者 builde...阅读全文