手撸golang GO与微服务 ES-CQRS模式之2

手撸golang GO与微服务 ES-CQRS模式之2 缘起 最近阅读 [Go微服务实战] (刘金亮, 2021.1) 本系列笔记拟采用golang练习之 gitee: https://gitee.com/ioly/learning.gooop ES-CQRS模式 ES(Event Sourcing)事件溯源非常好理解, 指的是将每次的事件都记录下来, 而不是去记录对象的状态。 比如新建、修改等都会作为事件记录下来, 当需要最新的状态时,通过事件的堆叠来计算最新的状态。 按照事件溯源的模式进行架...阅读全文

简书 2021-03-24 05:32:36 老罗话编程

golang reflect.Select 用法

package main import ( "fmt" "reflect" "strconv" ) func main() { var chs1 = make(chan int) var chs2 = make(chan float64) var chs3 = make(chan string) var ch4close = make(chan int) defer close(ch4close) go func(c chan int, ch4close chan int) { for i :=...阅读全文

简书 2021-03-24 05:32:35 如水网

now扩展-go的时间工具箱

关于我 我的博客|文章首发 golang不像C#,Java这种高级语言,有丰富的语法糖供开发者很方便的调用。所以这便催生出很多的开源组件,通过使用这些第三方组件能够帮助我们在开发过程中少踩很多的坑。 时间处理是所有语言都要面对的一个问题,parse根据字符串转为date类型,tostring()将date类型转为定制化的字符串。 在实际使用过程中,parse的使用有一种不是很舒服的方法。 上源码 time1, _ := time.Parse("2006-01-02", "2020-02-22")...阅读全文

51CTO博客 2021-03-23 08:39:18 qq5c5012ac9b084

手撸golang GO与微服务 ES-CQRS模式之2

手撸golang GO与微服务 ES-CQRS模式之2缘起最近阅读 [Go微服务实战] (刘金亮, 2021.1)本系列笔记拟采用golang练习之gitee:https://gitee.com/ioly/learning.gooopES-CQRS模式ES(Event Sourcing)事件溯源非常好理解, 指的是将每次的事件都记录下来, 而不是去记录对象的状态。 比如新建、修改等都会作为事件记录下来, 当需要最新的状态时,通过事件的堆叠来计算最新的状态。 按照事件溯源的模式进行架构设计, 就是...阅读全文

Segmentfault 2021-03-25 18:32:33 ioly

Go系列:Go项目中包的管理

以前的go 项目需要放在GOPATH中src中编译执行,在golang1.11之后引入了go modules特性。在go1.11之后的版本可以使用go modules管理go项目中包的依赖,也使项目脱离了GOPATH,可以放置在任意目录。Go module的官方定义:模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。开启go mod...阅读全文

51CTO博客 2021-03-23 20:03:17 mob604756f3ed23

Go系列:基础入门(一)

简介Go是编译型的语言。Go的工具链将程序的源文件转变成机器的二进制指令。hello world例子在helloworld.go中写入package mainimport "fmt"func main(){ fmt.Println("Hello world")}go run helloworld.go 运行程序输出:Hello worldgo build helloworld.go 可以编译程序,生成helloworld的可执行程序以后可以直接执行:./helloworldgo代码是使用包来组织...阅读全文

51CTO博客 2021-03-23 20:03:03 mob604756f3ed23

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...阅读全文

51CTO博客 2021-03-23 15:40:19 mob604756f06ed8

推荐几本学习 Go 语言的书籍

首先推荐《Go 程序设计语言》这本书:豆瓣评分挺高的,需要特别说说这本书里面的示例代码,质量非常高!如果跟着敲一遍,自己多理解的话,对于 Go 一定会有更好的理解。我目前也在看这本书,很多代码甚至还不是非常理解,需要多花一点时间。当然我觉得这也挺好的,与其看一些垃圾书,还不如认认真真的看完一本高质量的书来得爽!其他的相关书籍就不是很了解了,只不过也有一些质量和口碑都比较好的,这里分享给大家几本 Go 的书籍:Go 高级编程Go 语言编程Head First Go (英文版)Go 源码剖析Go 语...阅读全文

Segmentfault 2021-03-25 17:32:35 roseduan

Golang语言学习笔记(打卡✏️第一天)|Go主题月

Go语言环境搭建Go 语言支持以下系统Linux,FreeBSD,Mac OS,Windows。Go官方安装包地址:https://golang.org/dl/。Google安装包地址:https://golang.google.cn/dl/。测试是否安装成功E:\Go>go version go version go1.16.2 windows/amd64Go项目的组成部分:包声明引入包函数变量语句 & 表达式注释新建test.go,切换到文件目录,执行go run test.go运行test...阅读全文

Segmentfault 2021-03-25 15:32:33 叫我詹躲躲

Go Hash

哈希 哈希(Hash)也称为散列,是把任意长度的输入通过哈希算法变换为固定长度的输出,这个输出值也就是散列值。 哈希表是根据键值对(key value)而直接进行访问的数据结构,通过将键值对映射到表中一个位置来访问记录,以加快查询速度。映射函数又称为散列函数,存放记录的数组叫做哈希表。 如果两个输入串的哈希函数的值相同则发生了碰撞(Collision),既然把任意较长字符串转化为固定长度且较短的字符串,因此必有一个输出串对应多个输入串,碰撞是必然存在的。这种碰撞又称为哈希冲突。 哈希碰撞 散列函...阅读全文

简书 2021-03-23 19:32:36 JunChow520

分布式任务 + 消息队列框架 go-queue

为什么写这个库应用场景有哪些如何使用总结为什么要写这个库?在开始自研 go-queue 之前,针对以下我们调研目前的开源队列方案:beanstalkdbeanstalkd 有一些特殊好用功能:支持任务priority、延时(delay)、超时重发(time-to-run)和预留(buried),能够很好的支持分布式的后台任务和定时任务处理。如下是 beanstalkd 基本部分:job:任务单元;tube:任务队列,存储统一类型 job。producer 和 consumer 操作对象;prod...阅读全文

51CTO博客 2021-03-23 17:42:08 mob604756e5202f

值得推荐的五种自动化代码审查工具

众所周知,代码审查不但可以提高代码库的质量,而且能够避免开发人员将程序中的错误和问题传递给其他团队成员。不过,手动执行代码审查既费时又费力。这就是为什么许多开发团队会使用自动化工具,来完成此项工作的原因。通过自动化流程,此类代码审查工具可以提高代码的质量,节省宝贵的开发时间,并且让开发人员更专注于构建应用,而不必反复地检查代码。此外,作为静态分析和单元测试框架,自动化代码审查工具不但能够满足业务所需的速度和敏捷性,还可以提供更快的反馈、更好的代码质量、以及更少的产品转化时间。通过长时间的迭代,目...阅读全文

简书 2021-03-23 17:34:28 鹤子青云上

与其摸鱼,不如来看:高性能消息中间件NSQ解析的整体介绍

随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 Nsq 使用 Go 语言开发的轻量级的分布式消息队列,适合小型项目使用、用来学习消息队列...阅读全文

简书 2021-03-23 17:34:27 该用户已秃头

Go Sort

二分查找 顺时针查找 很多语言中排序算法都是和序列数据类型关联,同时排序函数和具体类型元素关联。相比之下,Golang的sort.Sort函数不会对具体的序列和它的元素做任何假设。相反它使用了一个接口类型sort.Interface来指定通用的排序算法和可能被排序到的序列类型之间的约定。这个接口的实现由序列的具体表示和它希望排序的元素决定,序列的表示经常会是一个切片。 算法 sort包内部实现了四种基本的排序算法 插入排序insertionSort` 归并排序symMerge 堆排序heapSo...阅读全文

简书 2021-03-23 17:32:40 JunChow520

聊聊go-ddd-sample

序本文主要赏析一下go-ddd-sample项目结构├── _sql ├── application ├── config ├── domain │ └── repository ├── infrastructure │ └── persistence │ └── testdata └── interfaces └── testdata这里分为application、domain、infrastructure、interfaces四层domain├── repository │ ├── mock...阅读全文

51CTO博客 2021-03-23 16:30:55 mob604756e5202f

词法分析器

维基百科介绍:词法分析是计算机科学中将字符序列转换为标记序列的过程。进行词法分析的程序或者函数叫作词法分析器。有如下原始程序代码add_result = 1 + 2通过词法分析得到以下结果NAME `add_result` 0, 0 SYMBOL `=` 0, 11 INT `1` 0, 13 SYMBOL `+` 0, 15 INT `2` 0, 17整理成表格形式标记类型字面值行号列号NAMEadd_result00SYMBOL=011INT1013SYMBOL+015INT2017我们可以...阅读全文

Segmentfault 2021-03-25 15:32:32 bxtkezhan

2021-03-22:小虎去买苹果,商店只提供两种类型的塑料袋,每种类型都有任意数量。1.能装下6个苹果的袋子,2.能装下8个苹果的袋子。小虎可以自由使用两种袋子来装苹果,但是小虎有强迫症,他要...

2021-03-22:小虎去买苹果,商店只提供两种类型的塑料袋,每种类型都有任意数量。1.能装下6个苹果的袋子,2.能装下8个苹果的袋子。小虎可以自由使用两种袋子来装苹果,但是小虎有强迫症,他要求自己使用的袋子数量必须最少,且使用的每个袋子必须装满。给定一个正整数N,返回至少使用多少袋子。如果N无法让使用的每个袋子必须装满,返回-1。 福大大 答案2021-03-22: 1.自然智慧即可。 N一定是2的倍数,否则两种袋子始终装不满,原因是6和8的最小公倍数是2。 先全部装8号袋,剩下的苹果装6号...阅读全文

简书 2021-03-23 11:38:09 福大大架构师每日一题

手撸golang GO与微服务 ES-CQRS模式之1

手撸golang GO与微服务 ES-CQRS模式之1 缘起 最近阅读 [Go微服务实战] (刘金亮, 2021.1) 本系列笔记拟采用golang练习之 git地址: https://gitee.com/ioly/learning.gooop ES-CQRS模式 ES(Event Sourcing)事件溯源非常好理解, 指的是将每次的事件都记录下来, 而不是去记录对象的状态。 比如新建、修改等都会作为事件记录下来, 当需要最新的状态时,通过事件的堆叠来计算最新的状态。 按照事件溯源的模式进行架...阅读全文

简书 2021-03-23 11:37:59 老罗话编程