抓取 Binance 的盘口价格 (3)
package 包的管理
- 包名一般情况和文件夹名相同.
- 相同包下, 不同文件的调用无需使用任何其他前缀等操作.
- 包外部访问使用
包名.方法名
- 只有命名为首字母大写的方法或 struct, 才能被包外部调用, 类似 public 方法.
- public 方法必须有注释, 注释格式为
// 方法名 实际注释内容
如何让主进程不退出
一般情况, 很多业务逻辑都使用了 go
协程进行, 主进程的作用变得好像只是拉起一些方法.
那么怎么让主进程常驻呢, 网上找了一下, 大致就是创造死循环或者读取一个不会有数据的 channel.
1 | for { |
基于观察者模式的配置文件动态加载
基本思路
动态加载配置文件的思路大致有 2 个, 定时根据文件的最后修改日期判断(只存储一个上次修改时间戳), 或者定时直接重新读取文件内容(要存储整体文件内容或者单个存储逐一比较)
首先根据文件修改日期, 或者存储文件整体内容的方案比较类似, 实现起来相对简单. 劣势就是修改的内容可能只涉及某一部分, 但是全部内容都要进行更新. 涉及到长连接的要短线重连(即使改的不是和长连接相关的配置内容).
文件中的值单一存储, 这样在某个值变化时, 可以有针对性的重启某些业务.
参考文档: https://cloud.tencent.com/developer/article/1165960
代码实现
首先实现一个配置文件结构体
1 | // BinanceConf 币安配置 |
定时读取数据, 检查文件变更
1 | func (bc *BinanceConf) Init(filename string) { |
读取文件判断变更细节
1 | // ReadWatchConf 读取监听盘口价格配置 |
定义观察者接口
1 | // Observer 观察者模式接口 |
至此, 一个定时检查配置文件变更的观察者就完成了.
接下来在使用该配置文件的结构中定义观察者
1 | type BinanceWatcher struct {} |