写点什么

Golang 常见架构模式

用户头像
escray
关注
发布于: 2021 年 04 月 25 日
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 对象。问题是为什么这里需要使用 * 号?


fmt.Println(*e)
复制代码


我的理解是表示取了指针 e 所指的值,不知道是否正确?


顺便说,如果打印


fmt.Println(e)
复制代码


结果是:


&{{Mike 30} {[Java Go C]}}
复制代码


从 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

发布于: 2021 年 04 月 25 日阅读数: 18
用户头像

escray

关注

Let's Go 2017.11.19 加入

Let's Go,用 100 天的时间从入门到入职

评论

发布
暂无评论
Golang 常见架构模式