随笔分类 - golang
golang
摘要:公司对底层基础库进行了重构,线上稳定跑了几天,在查看订单系统的log时,有几条error信息非常的奇怪, orderID:80320180 statemachine error: no event [Revoked] at current state [Paid] orderID:81983045
阅读全文
摘要:上一篇帖子 分解uber依赖注入库dig-使用篇 把如何使用dig进行代码示例说明,这篇帖子分析dig的源码,看他是如何实现依赖注入的。 dig实现的中心思想:所有传入Provide的函数必须要有除error外的返回参数,返回参数供其他函数的形参使用。 比如上一篇的第一个例子里,一个函数func()
阅读全文
摘要:golang的依赖注入库非常的少,好用的更是少之又少,比较好用的目前有两个 谷歌出的wire,这个是用抽象语法树在编译时实现的。 uber出的dig,在运行时,用返射实现的,并基于dig库,写了一个依赖框架fx 本系列分几部分,先对dig进行分析,第一篇介绍dig的使用,第二篇再从源码来剖析他是如何
阅读全文
摘要:在使用pprof分析go的项目时,经常会查看各项指标的有向图 原理是使用Graphviz(Graph Visualization Software)解析生成的dot脚本得到最终展示给我们的图信息。 dot是Graphviz用于画有向图和无向图语言,语法简单。 dot的抽象语法 [ strict ]
阅读全文
摘要:Protocol Buffers 是一种与语言、平台无关,可扩展的序列化结构化数据的方法,常用于通信协议,数据存储等等。相较于 JSON、XML,它更小、更快、更简单,因此也更受开发人员的青眯。 基本语法 syntax = “proto3”; package model; service MySer
阅读全文
摘要:关于go的单元测试,之前有写过一篇帖子go test测试用例那些事,但是没有说go官方的库mock,很有必要单独说一下这个库,和他的实现原理。 mock主要的功能是对接口的模拟,需要在写代码的时候定义抽象很多接口,有时为了能方便go test可能会多写一些冗余代码,但这些工作会让你的单元测试更灵活。
阅读全文
摘要:tcp服务端和客户端建立连接后会长时间维持这个连接,用于互相传递数据,tcp是以流的方式传输数据的,就像一个水管里的水一样,从一头不断的流向另一头。 理想情况下,发送的数据包都是独立的, 现实要复杂一些,发送方和接收方都有各自的缓冲区。 发送缓冲区:应用不断的把数据发送到缓冲区,系统不断的从缓冲区取
阅读全文
摘要:能用程序去做的事,就不要用手,编写自己的代码生成器就是用来解放你的双手,替你做一些重复性的工作。 上篇帖子写了模板的基础 go模板详说 ,有了基础就要做点什么东西,把所学到的东西应用起来才能更好的进步。于是用模板写了一个代码生成器,用于把数据库的表转换成go的struct,目前支持MySQL和Pos
阅读全文
摘要:模板是我们常用的手段用于动态生成页面,或者用于代码生成器的编写等。比如把数据库的表映射成go语言的struct,这些体力活,写个代码生成器是最合适不过的了. 示例把表转成 struct : 这里--> go模板-代码生成器 当然这篇帖子不是写关于代码生成器的,是详细说一下go的Template,对T
阅读全文
摘要:上一篇基于 的list实现了一个简单的消息队列: "玩转redis 简单消息队列" "源码地址" "使用demo" 产品经理经常说的一句话,我们不光要有 功能,还要 功能,这样客户才能更满意。同样的,只有简单消息队列是不够的,还要有 才能算是一个完整的消息队列。 看看 的命令,放眼望去,的有序集合(
阅读全文
摘要:使用 语言基于 写了一个简单的消息队列 "源码地址" "使用demo" redis的 非常的灵活,可以从左边或者右边添加元素,当然也以从任意一头读取数据 添加数据和获取数据的操作也是非常简单的 从左边插入数据 大右边插入数据 从左边取出一个数据 从右边取出一个数据 或者使用 `BRPOP` 来读取数
阅读全文
摘要:唯一ID算法Snowflake相信大家都不墨生,他是Twitter公司提出来的算法。非常广泛的应用在各种业务系统里。也因为Snowflake的灵活性和缺点,对他的改造层出不穷,比百度的UidGenerator、美团的Leaf、索尼的Sonyflake等等。这篇帖子主要是讲一下原生的Snowflake
阅读全文
摘要:"剖析nsq消息队列 目录" 实际应用中,一部分服务集群可能会同时订阅同一个 ,并且处于同一个 下。当 有消息需要发送给订阅客户端去处理时,发给哪个客户端是需要考虑的,也就是我要说的消息的负载。 如果不考虑负载情况,把随机的把消息发送到某一个客服端去处理消息,如果机器的性能不同,可能发生的情况就是某
阅读全文
摘要:剖析nsq消息队列(一) 简介及去中心化实现原理 剖析nsq消息队列(二) 去中心化源码解析 剖析nsq消息队列(三) 消息传输的可靠性和持久化[一] 剖析nsq消息队列(三) 消息传输的可靠性和持久化[二]diskqueue 剖析nsq消息队列(四) 消息的负载处理
阅读全文
摘要:"剖析nsq消息队列 目录" "上一篇主要说了一下nsq是如何保证消息被消费端成功消费" ,大概提了一下消息的持久化, 设置为 0,所有的消息将会存储到磁盘。 总有人说 的持久化问题, 消除疑虑的方法就是阅读原码做benchmark测试 ,个人感觉 还是很靠谱的。 自己实现了一个先进先出的消息文件队
阅读全文
摘要:"剖析nsq消息队列 目录" "上两篇帖子主要说了一下nsq的拓扑结构,如何进行故障处理和横向扩展" ,保证了客户端和服务端的长连接,连接保持了,就要传输数据了, 如何保证消息被订阅者消费,如何保证消息不丢失,就是今天要阐述的内容。 topic、channel、和消费我客户端的结构如上图,一个 下有
阅读全文
摘要:"剖析nsq消息队列 目录" 在上一篇帖子 " 剖析nsq消息队列(一) 简介及去中心化实现原理 " 中,我介绍了nsq的两种使用方式,一种是直接连接,还有一种是通过nslookup来实现去中心化的方式使用,并大概说了一下实现原理,没有什么难理解的东西,这篇帖子我把 实现去中心化的源码和其中的业物逻
阅读全文
摘要:"剖析nsq消息队列 目录" 分布式消息队列 "nsq" ,简单易用,去中心化的设计使 更健壮, 充分利用了 语言的 和`channel nsq`的源码分析给大家看。 主要的分析路线如下 分析 的整体框架结构,分析如何做到的无中心化分布式拓扑结构,如何处理的单点故障。 分析 是如何保证消息的可靠性,
阅读全文
摘要:`注:写帖子时go的版本是1.12.7` "Context的github地址" 语言中实现一个 不用像其他语言一样需要显示的声明实现接口。 语言只要实现了某 的方法就可以做类型转换。 语言没有继承的概念,只有 的概念。想深入学习这些用法,阅读源码是最好的方式. 的源码非常推荐阅读,从中可以领悟出 语
阅读全文
摘要:阅读源码的过程,就像是在像武侠小说里阅读武功秘籍一样,分析高手的一招一式,提炼出精髓,来增强自己的内力。 之前的帖子说了一下 "微服务的雪崩效应和常见的解决方案" ,太水,没有上代码怎么叫解决方案。 上有很多开源的库来解决 ,比较出名的是 的开源库 "hystrix" 。集 、`熔断 容错 java
阅读全文

浙公网安备 33010602011771号