Golang 常见架构模式
极客时间《Go 语言从入门到实践》学习笔记 12,题图来自网络
41 | 实现 pipe-filter framework
Filter 封装了数据处理功能,包括处理参数、填充、根据 Filter 内容召回广告或者排序
Filter 就是给它数据,然后等待数据处理的结果,只和数据格式或者数据类型耦合,只要传递给他的数据格式或者类型可以处理
在处理过程中可以加入新的 Filter 进行扩展
分布式系统中的 Pipe 可能需要一个网络连接或者在异步环境中的 buffer,在进程内部,就是方法调用
pipe-filter framework 类似于 Unix 或者 Linux 的管道指令
课程里面说可以形成组合模式,留言里面也有同学说类似于 责任链+装饰器模式
照着老师的代码敲了一遍。
42 | 实现 micro-kernel framework
老师在代码里面写了好几个 destory,搞得我也快不认识 destroy 了,最后还查了字典。之前写 Ruby 代码的时候,就经常手滑写错。
微内核,大部分 IDE 都是微内核模式,比如 VS Code 通过增加 Go 插件,增加对 Go 语言的处理。
(IDE)进程内的 plugin 发生错误的时候,微内核模式也可以很好的隔离错误,不影响其他的 plugin,也不会影响内核进程。
(IDE)保持架构一致性,通过插件支持不同的语言
抄代码,这可能是单个文件代码行数最多的。
这节课感觉难度是比较大的,看了好几遍代码,还是有些地方没有搞清楚,比如按照老师的回复,添加了 WaitGroup,结果代码停不下来了……原因可能是 wg.Done() 没有被执行到。
43 | 内置 JSON 解析
有一个小问题。在示例代码中,使用下面的语句打印了从字符串到空对象填充之后的 Employee 对象。问题是为什么这里需要使用 * 号?
我的理解是表示取了指针 e 所指的值,不知道是否正确?
顺便说,如果打印
结果是:
从 stackoverflow 上找到的
The * Operator
goes in front of a variable that holds a memory address and resolves it (it is therefore the counterpart to the & operator). It goes and gets the thing that the pointer was pointing at
版权声明: 本文为 InfoQ 作者【escray】的原创文章。
原文链接:【http://xie.infoq.cn/article/a6c8a9369fe5b4978290a3c58】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论