基于GO语言的 高性能MYSQL 增量同步工具 MysqlToAll

开源地址 https://github.com/gitstliu/MysqlToAll # MysqlToAll 将mysql数据以指定的格式同步到redis、redis-cluster、kafka、es、本地文件系统的工具 高性能 # 配置方法 ## canalconfigs ``` xxx.toml canal配置文件 xxx.pos binlog解析位置文件 ``` ## config ``` config.toml 输出源配置文件 ``...阅读全文

2019-07-05 13:54:25 gitstliu
阅读:2864 评论:0

Golang的垃圾回收

前言 最近垃圾分类的话题热度一下子就上去了,很多人因为垃圾分类的问题很头痛。因为垃圾这个话题,那我就想来说说Golang里面的垃圾,于是就有了这篇博客,golang中的垃圾回收。 现阶段网上针对golang垃圾回收的解析已经很多了,所以我也没有必要仔仔细细的一点点说,还是那个原则,用最直白的话告诉你,垃圾到底是怎么收的。 GC的意义 首先本文后续都会使用 GC 代替垃圾回收这几个字。 我们知道创建对象会给他分配内存资源,如果这个对象不使用了,而这个内存资源却一直被占用的话,那么我们的电脑很快就会...阅读全文

2019.07.05 14:54 LinkinStar
阅读:2470 评论:0

9 Go盒子:包及包管理

一、Go的包设计理念 1.代码盒子 在Go程序中,包是代码模块组织的单位,为项目代码组织结构,提高代码的可读性、重用性及可维护性。它就是一个代码盒子,把可共同维护的相关功能组织在一起,为外部提供功能实现。理解包可以更好的编写高可维护代码。 2.包结构 2.1 main包与main()函数 main()函数是程序的唯一入口,它放置于main包中。 main()函数无参数无返回值 //声明包名 package main //导入其它包 import "fmt" //程序的入口函数 func main...阅读全文

阅读:702 评论:0

进程、线程、协程

进程时代 image 后来,现代化的计算机有了操作系统,每个程序都是一个进程,但是操作系统在一段时间只能运行一个进程,直到这个进程运行完,才能运行下一个进程,这个时期可以成为单进程时代——串行时代。 和ENIAC相比,单进程是有了几万倍的提度,但依然是太慢了,比如进程要读数据阻塞了,CPU就在哪浪费着,伟大的程序员们就想了,不能浪费啊,怎么才能充分的利用CPU呢? 后来操作系统就具有了最早的并发能力:多进程并发,当一个进程阻塞的时候,切换到另外等待执行的进程,这样就能尽量把CPU利用起来,CPU...阅读全文

2019.07.05 19:56 大学渣PG
阅读:1104 评论:0

[译] 思考实践:用 Go 实现 Flutter

原文地址:Thought Experiment: Flutter in Go 原文作者:divan 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:suhanyujie 校对者:shixi-li 思考实践:用 Go 实现 Flutter 我最近发现了 Flutter —— 谷歌的一个新的移动开发框架,我甚至曾经将 Flutter 基础知识教给没有编程经验的人。Flutter 是用 Dart 编写的,这是一种诞生于 Chrome 浏览器的编程语言,后来改...阅读全文

2019年07月07日 掘金翻译计划
阅读:1348 评论:0

Golang 大杀器之跟踪剖析 trace

在 Go 中有许许多多的分析工具,在之前我有写过一篇 《Golang 大杀器之性能剖析 PProf》 来介绍 PProf,如果有小伙伴感兴趣可以去我博客看看。 但单单使用 PProf 有时候不一定足够完整,因为在真实的程序中还包含许多的隐藏动作,例如 Goroutine 在执行时会做哪些操作?执行/阻塞了多长时间?在什么时候阻止?在哪里被阻止的?谁又锁/解锁了它们?GC 是怎么影响到 Goroutine 的执行的?这些东西用 PProf 是很难分析出来的,但如果你又想知道上述的答案的话,你可以用...阅读全文

2019-07-18 10:02:42 煎鱼
阅读:965 评论:0

基于Golang的微服务——Micro实践(一)

这篇文章主要是微服务服务端的实践。 开始开发前需要先配置好Go的开发环境,可以看我写的基于Golang的微服务——上手篇 在 GOPATH目录下的src目录下创建我们的实战项目目录 tech,切换到这个目录 go get github.com/micro/go-micro //用于开发的微服务的RPC框架,是micro架构的基础 go get github.com/micro/protoc-gen-micro // 用于生成Protobuf的代码 go get github.com/micro/...阅读全文

阅读:1852 评论:0

深入研究goroutine栈

转载请注明出处:www.huamo.online 前言本文记录了自己深入理解goroutine栈布局的过程,潜入了一圈之后,发现底下的世界确实别有洞天,感觉很多东西都开阔明晰了许多。 内存布局是一个强相关于操作系统,处理器,机器架构的领域,和语言关系反而会少一些。只是golang诞生于plan9,在机器汇编层面,总是有一些自己特立独行的惯例规约,所以用golang切入,也是一个不错的契机。本文以x86架构为准进行讲解,都走了一遍,才发现其实都是在搞清楚一个话题:调用惯例。有兴趣的可以搜calli...阅读全文

2019-06-25 00:00 花木兰
阅读:3411 评论:0

Golang 大杀器之性能剖析 PProf

原文地址:Golang 大杀器之性能剖析 PProf 前言 写了几吨代码,实现了几百个接口。功能测试也通过了,终于成功的部署上线了 结果,性能不佳,什么鬼????? 想做性能分析 PProf 想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,本文将带你学习、使用 Go 后花园,涉及如下: runtime/pprof:采集程序(非 Server)的运行数据进行分析 net/http/pprof:采集 HTTP Server 的运行时数据进行分析 是什么 pprof 是用于可视化和...阅读全文

阅读:562 评论:0

敏感词匹配

今日去被大佬问到如何实现一个敏感词的匹配,所以写了一个简版的敏感词匹配结构,还待后期优化! **注:暂时不可以投放到生产环境使用** **有喜欢的可以提交代码给我,或者拿走自己维护** 希望各位大佬指点 谢谢~, 关键词为网上找到的所以不是很全,望大家海涵~谢谢! 源码地址:https://github.com/tianye/sensitive_words 源码实现方式: ``` package decision import ( "fmt" ...阅读全文

阅读:854 评论:0

【深度知识】GO语言的goroutine并发原理和调度机制

1. 线程(Thread)和协程(Coroutine)的定义 Go语言最大的特色就是从语言层面支持并发(Goroutine),Goroutine是Go中最基本的执行单元。事实上每一个Go程序至少有一个Goroutine:主Goroutine。当程序启动时,它会自动创建。 为了更好理解Goroutine,现讲一下线程和协程的概念。 线程(Thread):有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄...阅读全文

阅读:5699 评论:3

理解 Go Channels[精品长文]

愿我所遇之人,所历之事,哪怕因为我有一点点变好,我就心满意足了。 本文转载自: blog.lab99.org/post/golang… 一、视频信息 1、视频观看地址 www.youtube.com/watch?v=KBZ… 2、PPT下载地址 download.csdn.net/download/xu… 3、博文 about.sourcegraph.com/go/understa… 二、Go 的并发特性 goroutines: 独立执行每个任务,并可能并行执行 channels: 用于 gor...阅读全文

2019年08月01日 衣舞晨风
阅读:1535 评论:0

浅析如何设计一个亿级网关

1.背景1.1 什么是API网关API网关可以看做系统与外界联通的入口,我们可以在网关进行处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等。1.2 为什么需要API网关RPC协议转成HTTP。由于在内部开发中我们都是以RPC协议(thrift or dubbo)去做开发,暴露给内部服务,当外部服务需要使用这个接口的时候往往需要将RPC协议转换成HTTP协议。请求路由在我们的系统中由于同一个接口新老两套系统都在使用,我们需要根据请求上下文将请求路由到对应的接口。统一鉴权对于鉴权操作...阅读全文

2019.08.21 16:56 互联网Java进阶架构
阅读:4886 评论:0

Golang中使用断路器

本文学习参考自:Circuit Breaker pattern 和 cep21/circuit 业务问题场景 在业务系统中,通常存在服务之间的相互调用,例如服务A调用服务B,当出现如下情形: 服务A与服务B之间的网络出现异常 服务B过载 服务B出现异常 服务A应该减少对服务B的调用量,甚至服务A应该停止调用服务B,有必要的话,还可以采取相应的降级措施`。当服务B恢复正常后,才开始继续调用服务B。 断路器模式 在家庭电路中有一个叫断路器的安全设备,当出现电路过载、短路、漏电等情况时,就会发生跳闸,...阅读全文

2019-08-24 17:04 yangxikun.com
阅读:2110 评论:0

golang_go-micro整合各种mq

NATS 介绍 NATS是一个开源、轻量级、高性能的分布式消息中间件,实现了高可伸缩性和优雅的Publish/Subscribe模型,使用Golang语言开发。NATS的开发哲学认为高质量的QoS应该在客户端构建,故只建立了Request-Reply,不提供 1.持久化 2.事务处理 3.增强的交付模式 4.企业级队列。 NATS消息传递模型 NATS支持各种消息传递模型,包括: 发布订阅(Publish Subscribe) 请求回复(Request Reply) 队列订阅(Queue Sub...阅读全文

2019-09-04 16:32:31 yylany
阅读:1144 评论:0

go防止缓存击穿

当线上接口请求量比较大时,如果恰好遇到缓存失效,会造成大量的请求直接打到数据库,导致数据库压力过大、甚至崩溃。如果缓存的数据实时性要求不那么高,可以试试 do-once-while-concurrent https://github.com/abusizhish... do-once-while-concurrent中有三个主要方法, Req 方法 对具有同一资源标识的请求进行拦截 Wait 方法 等待数据 Release 方法 广播信号,数据已就位 下面是一个简单的示例我们的实际项目中有 两级...阅读全文

2020-03-16 07:32:33 无形
阅读:1349 评论:0

Golang三色标记、混合写屏障GC模式图文全分析

原创声明:未经作者允许请勿转载, 如果转载请注明出处作者:刘丹冰Aceld, 微信公众号同名 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。 ​ Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次...阅读全文

阅读:10135 评论:6

Kratos 初始化源码分析

Kratos 是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。 名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成为战神并展开弑神屠杀的冒险历程。 好!开始吧! 小提示:阅读源码时请保持清醒。 首先是按照Kratos tool 生产的工程目录。 ├── CHANGELOG.md ├── OWNERS ├── README.md ├── api # api目录为对外保留的proto文件及生成的pb.go文件 │ ├── api.bm.g...阅读全文

2020-04-03 14:32:34 sdttttt
阅读:1393 评论:0

【go】指针的风骚操作(结合unsafe.point与uintptr)

指针是具有类型的 总所周知,声明的变量都是有具体类型的,而对于存储指针的变量是否有类型,有时是一头雾水,在此做一个小总结,指针是具有类型的。 就如: var c int fmt.Println(reflect.TypeOf(c)) d := &c fmt.Println(reflect.TypeOf(d)) 结果: int *int 那可能一些人就会有疑问,指针既然具有类型,那指针之间可以进行类型转换吗。就如下面一样操作 #(*Type)ptr a := (*int)(&xx) 在Go 的指针是...阅读全文

2020-04-06 21:32:54 dongzaidong
阅读:1286 评论:0

golang之数据验证validator

前言 在web应用中经常会遇到数据验证问题,普通的验证方法比较繁琐,这里介绍一个使用比较多的包validator。 原理 将验证规则写在struct对字段tag里,再通过反射(reflect)获取struct的tag,实现数据验证。 安装 go get github.com/go-playground/validator/v10 示例 package main import ( "fmt" "github.com/go-playground/validator/v10" ) type Users...阅读全文

2020-05-07 12:32:34 guyan0319
阅读:3026 评论:1