2.2.2 config.colorer = color.New()
代码中new()
又如何理解呢?
它来自https://github.com/labstack/gommon/blob/master/color/color.go
在New函数中,我们应当知道new函数的语法:func new(Type) *Type,内建函数 new 用来分配内存,第一个参数是一个类型,不是一个值,返回值是一个指向分配零值的指针。
在关于c的SetOutPut方法中,io.writer利用了流的读写,bytes.Buffer是一个可变字节的类型,可以让我们很容易的对字节进行操作,比如读写,追加等。bytes.Buffer实现了io.Writer接口,所以我么可以很容易的进行读写操作。
io的源码
os.File是打开文件
如果文件描述符是terminal则返回true,c.disabled=true,表示如果不是终端,则不开启的标志,也就是LoggerWithConfig
函数能用到颜色输出的地方,只有终端,当人打开去看的时候,如果是终端输出日志,就给输出特定的颜色。
2.2.3 sync.Pool又是什么?
通常用golang来构建高并发场景下的应用,但是由于golang内建的GC机制会影响应用的性能,为了减少GC,golang提供了对象重用的机制,也就是sync.Pool
对象池。
2.3 白名单、证书、密钥的判断
回到main.go代码中来。
- 假如whitelist不为空,通过
“,”
分割,因为白名单仓库可能是多个的,然后打印输出 - 如果whitelist为空,说明介绍所有的镜像仓库来源
- 假如证书与密钥存在,开启
https server
- 假如证书与密钥不存在,开启http server
最后,app.run(os.args)
启动服务并显示文本。
3. 总结
编写一个webhook,cli.v1可以帮助实现:
app.Name实现构建二进制的命令名字;
app.Usage描述使用方法;
app.Flags实现配置参数说明;
app.Action实现具体代码逻辑;
app.Run运行启动。
初次之外,echo,启动一个web客户端,并通过设定API接口实现具体逻辑。
handler目录写API接口的逻辑,主要包含获取需求的对象以及如何展示有用的对象信息。
rule目录写具体对获取的对象设定规则的逻辑。