手撸golang 行为型设计模式 命令模式

手撸golang 行为型设计模式 命令模式缘起最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔记拟采用golang练习之命令模式命令模式(Command Pattern)是对命令的封装, 每一个命令都是一个操作: 请求方发出请求要求执行一个操作; 接收方收到请求,并执行操作。 命令模式主要适用于以下应用场景。 (1)现实语义中具备“命令”的操作(如命令菜单、Shell命令等)。 (2)请求的调用者和接收者需要解耦,使得调用者和接收者不直接交互。 (3)需要抽象出等待执行的行为,比如...阅读全文

Segmentfault 2021-02-12 19:32:32 .container .car 等

源码剖析sync.WaitGroup(文末思考题你能解释一下吗?)

原文链接:源码剖析sync.WaitGroup(文末思考题你能解释一下吗?)前言哈喽,大家好,我是asong,这是我并发编程系列的第三篇文章,上一篇我们一起分析了sync.once的使用与实现,今天我们一起来看一看sync.WaitGroup的使用与实现.快过年了,这是年前最后一篇推文了,待我积累一下,年后加大力度写干货,在这里先预祝大家新春快乐,身体健康,万事如意!什么是sync.WaitGroup官方文档对sync.WatiGroup的描述是:一个waitGroup对象可以等待一组协程结束,...阅读全文

Segmentfault 2021-02-11 11:32:32 .container .car 等

手撸golang 行为型设计模式 迭代器模式

手撸golang 行为型设计模式 迭代器模式缘起最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔记拟采用golang练习之迭代器模式迭代器模式(Iterator Pattern)又叫作游标模式(Cursor Pattern), 它提供一种按顺序访问集合/容器对象元素的方法, 而又无须暴露集合内部表示。 迭代器模式可以为不同的容器提供一致的遍历行为, 而不用关心容器内元素的组成结构, 属于行为型设计模式。 迭代器模式的本质是把集合对象的迭代行为抽离到迭代器中, 提供一致的访问接口。 ...阅读全文

Segmentfault 2021-02-11 11:32:32 .container .car 等

go-carbon 1.3.1 版本发布,新增 DiffForHumans() 方法和多语言支持

carbon 是一个轻量级、语义化、对开发者友好的Golang时间处理库,支持链式调用、农历和gorm、xorm等主流orm 如果您觉得不错,请给个star吧 github:[github.com/golang-module/carbon](https://github.com/golang-module/carbon "github.com/golang-module/carbon") gitee:[gitee.com/go-package/carbon](https://g...阅读全文

Go语言中文网 2021-02-08 10:36:02 gouguoyin

go-carbon 1.3.1 版本发布,新增 DiffForHumans() 方法和多语言支持

carbon 是一个轻量级、语义化、对开发者友好的Golang时间处理库,支持链式调用、农历和gorm、xorm等主流orm如果您觉得不错,请给个star吧github:github.com/golang-module/carbongitee:gitee.com/go-package/carboncarbon.Now().DiffForHumans()) // just now carbon.Now().SubYears(1).DiffForHumans()) // 1 years ago ca...阅读全文

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

markdown 自定义的思考

写在前面的已经记不清什么时候开始接触的markdown了,好像是从我的一个学长做了我们学校的大数据协会论坛开始的。如果我没记错的话用的还是b3log的开源项目,应该是使用的Symphony。后来听学长说太复杂了,维护无从下手然后删库跑路了😂也正是他画的这个饼,让我从零开始设计一个社区给不同学科、不同专业的同学来使用,之前实现过的版本并不是很满意(应该在我的链滴帖子里还能找到),然后又开始了重构之路。也正是不断的与markdown不同的编辑器接触,也让我对marked.js、markdown-it...阅读全文

Segmentfault 2021-02-10 11:32:32 .container .car 等

Focus 聚焦社区 v0.2.0,GoFrame 开源社区项目

此版本对核心功能进行了完善,也对大家提的一些建议及bug进行了修复;也诚请各位小伙伴们关注GoFrame项目发展,为生态添砖加瓦,加油助力!更新功能:文章回复功能完善:加入了点赞,踩,删除,回复,采纳;编辑资料加入了我的消息模块:此版本主要加入了回复消息统一展示;加入了简单的管理员功能,可以对垃圾文章和垃圾回复进行清理;加入Docker Compose一键部署,极大方便linux环境部署;对网友的一些建议及上一版本bug进行了修复;零、关于FocusFocus聚焦社区是GoFrame社区项目,采...阅读全文

Segmentfault 2021-02-09 23:32:43 .container .car 等

剑指 Offer-斐波那契数列

题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39 解题思路: 斐波那契数列:f(n) = f(n-1) + f(n-2) Java 版: public class Solution { int[] f=new int[40]; public Solution(){ f[0]=0; f[1]=1; for(int i=2;i<f.length;i++) f[i]=f[i-1]+f[i-2]; } public i...阅读全文

简书 2021-02-08 03:32:43 黄sir_

手撸golang 行为型设计模式 责任链模式

手撸golang 行为型设计模式 责任链模式 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 本系列笔记拟采用golang练习之 责任链模式 责任链模式(Chain of Responsibility Pattern)将链中每一个节点都看作一个对象, 每个节点处理的请求均不同, 且内部自动维护下一个节点对象。 当一个请求从链式的首端发出时, 会沿着责任链预设的路径依次传递到每一个节点对象, 直至被链中的某个对象处理为止, 属于行为型设计模式。 责任链模式主要适用于以下应用场景。 ...阅读全文

简书 2021-02-07 23:32:41 ioly

手撸golang 行为型设计模式 责任链模式

手撸golang 行为型设计模式 责任链模式缘起最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔记拟采用golang练习之责任链模式责任链模式(Chain of Responsibility Pattern)将链中每一个节点都看作一个对象, 每个节点处理的请求均不同, 且内部自动维护下一个节点对象。 当一个请求从链式的首端发出时, 会沿着责任链预设的路径依次传递到每一个节点对象, 直至被链中的某个对象处理为止, 属于行为型设计模式。 责任链模式主要适用于以下应用场景。 (1)多个对...阅读全文

Segmentfault 2021-02-10 21:32:32 .container .car 等

Go map定义的几种方式以及修改技巧

直入正题,我们看下以下代码:package main import ( "encoding/json" "fmt") func main() { //第一种声明 var language map[string]string language = make(map[string]string, 10) //在使用map前,需要先make,make的作用就是给map分配数据空间 language["1"] = "C#" language["2"] = "go" language["3"] = "py...阅读全文

51CTO博客 2021-02-07 21:22:27 mb6018ead621887

Go并发处理

写了一个web接口,想高并发的请求这个接口,进行压力测试,所以服务端就实现了一个线程池。代码从网上理解了之后写的。代码实例简单的介绍: 首先实现一个Job接口,只要有方法实现了Do方法即可 定义个分发器结构体,主要是WorkPool线程池,用于存储Worker的JobChannel init的时候,先初始化一个JobQueue队列,其他的函数调用这个线程池的时候,把任务放在这个队列即可。 然后Run的时候,创建多个Worker,起初的时候,woker会把自身的JobChannel先注册到线程池w...阅读全文

51CTO博客 2021-02-07 21:10:25 mb6018ead621887

Go - 实现项目内链路追踪

为什么项目内需要链路追踪?当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。从图中可以清晰的看出他们之间的调用关系,通过一个例子说明下链路的重要性,比如对方调我们一个接口,反馈在某个时间段这接口太慢了,在排查代码发现逻辑比较复杂,不光调用了多个三方接口、操作了数据库,还操作了缓存,怎么快速定位是哪块执行时间很长?不卖关子,先说下本篇文章最终实现了什么,如果感兴趣再继续往下看。实现了通过记录如下参数,来进行问题定位,关于每个参数的结构在下...阅读全文

51CTO博客 2021-02-07 21:06:53 mb6018ead621887

模块一 GO语言基础知识-程序实体的那些事(上)

我已经为你打开了 Go 语言编程之门,并向你展示了“程序从初建到拆分,再到模块化”的基本演化路径。一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会把车开到模块化编程的道路上。我相信,等你真正理解了这个过程之后,也会驾轻就熟的。上述套路是通用的,不是只适用于 Go 语言。但从本篇开始,我会开始向你介绍 Go 语言中的各种特性以及相应的编程方法和思想。我在讲解那两种源码文件基本编写方法的时候,声明和使用了一些程序实体。你也许已经若有所觉,也许还在云里雾里。没关系,...阅读全文

51CTO博客 2021-02-07 21:06:28 mb6018ead621887

go-zero解读与最佳实践(上)

本文有『Go开源说』第三期 go-zero 直播内容修改整理而成,视频内容较长,拆分成上下篇,本文内容有所删减和重构。大家好,很高兴来到“GO开源说” 跟大家分享开源项目背后的一些故事、设计思想以及使用方法,今天分享的项目是 go-zero,一个集成了各种工程实践的 web 和 rpc 框架。我是Kevin,go-zero 作者,我的 github id 是 kevwan。go-zero 概览go-zero 虽然是20年8月7号才开源,但是已经经过线上大规模检验了,也是我近20年工程经验的积累,...阅读全文

51CTO博客 2021-02-07 20:48:59 mb6018ead621887

Go - go build 各种系统下的可执行文件

go build各种不同系统下的可执行文件 Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。 1、Windows下编译Mac, Linux平台的64位可执行程序: $ SET CGO_ENABLED=0SET GOOS=darwin3 SET GOARCH=amd64 go build main.go $ SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go 2、Mac下编译Linux, Win...阅读全文

2021-02-07:给定两棵二叉树的头节点head1和head2,如何判断head1中是否有某个子树的结构和head2完全一样?

福哥答案2021-02-07: 对head1和head2序列化为str1和str2。然后用kmp算法去判断str2是否是str1的子串。如果是,head2是子树;如果不是,head2不是子树。 代码用golang编写,代码如下: package main import "fmt" func main() { root := &TreeNode{} root.Val = 1 root.Left = &TreeNode{} root.Left.Val = 2 root.Right = &TreeNo...阅读全文

简书 2021-02-07 21:32:43 福大大架构师每日一题