跟着开源项目学GO(6)

256 阅读3分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

生命不息,学习不止

题外话

今天是元宵节,这里祝广大掘金网友以后的身材都和汤圆一样,又白又圆,哈哈哈哈哈,昨天的情人节大家过的怎么样,是不是都很美好呢?嘿嘿嘿……

截图_20222715112707.png

废话不多说,上货

在这里插入图片描述

开源项目——go-gin-api

go-gin-api

这是一个主要以gin框架为主,包含了一些常用功能,包括日志,菜单,权限,代码生成的功能的一个项目。

main.go

image.png

别问我为什么下面都是波浪线,因为我手欠把项目删除了,这是新clone下来的,着急写嘛将就一下而已啦

import中包含了导入的相关包,包括了内置包(未飘红的)和第三方包(飘红的),怎么样,这下感谢我着飘红的线了吧

还是这张图,context包还没有讲完,还得用呢……

第三方包

截图_20224015114035.png

这几个包就是已经封装好并发布了相关文档的第三方包,可以直接引用,或者导入并添加或 修改相关代码,以符合自己项目的业务

main.go 代码解析

终于到了真正读代码的环节了,上代码

截图_20224215114245.png

main函数就不多说了,程序入口

accessLogger, err := logger.NewJSONLogger{

这里是初始化了一个access日志的json格式日志记录器,日志的实体是zap的logger,一下是NewJSONLogger函数的部分代码,我会在后面详细讲解

截图_20221715031711.png

logger.WithDisableConsole(),
logger.WithField("domain", fmt.Sprintf("%s[%s]", configs.ProjectName, env.Active().Value())),
logger.WithTimeLayout(timeutil.CSTLayout),
logger.WithFileP(configs.ProjectAccessLogFile),

这四个logger调用的函数分别设置了日志的开启,日志写入内容,日志时间格式,日志写入文件存放位置

日志写入的内容是配置文件中的项目名称和当前配置环境变量

日期的格式如下

   const CSTLayout = "2006-01-02 15:04:05"

日志文件路径logs/go-gin-api-access.log

截图_20221315041346.png

最终在日志文件中呈现的相关结果入下

截图_20221615041603.png

if err != nil {
	panic(err)
}
    

声明完日志实体后,就是一个错误判断

因为go中没有try catch或者类似java中thorw一个错误的方式,所以一般都是使用panic()函数来实现错误宕机

panic()参数可以是任意类型的,所以可以传入自定义的错误类型

继续main.go中的代码,如下

截图_20221615051603.png

之后以相同的方式初始化了一个cronlogger,区别就是写入日志的文件不同,这里就不再赘述了,效果如下

截图_20221815051821.png

这里说一下这个level,level是日志的等级,可以手动设置,默认级别是info,还有debug,warn,error级别,debug级别最高,error级别最低,越高日志结果越详细,大家应该也都知道。

可在初始化时通过一下函数进行更改

截图_20222515052536.png

如声明一个error级别的日志

errLogger, err := logger.NewJSONLogger(
	logger.WithErrorLevel()
)

日志模块最后是一个同步函数,如下

截图_20223115053122.png

调用了底层内核Sync()函数,刷新所有缓冲日志条目,就以为这这一步因该在程序结束前最后触发,所以采用了defer 关键字

被defer关键字修饰的函数延迟触发,当有多个defer修饰的函数是,会按栈的方式执行,先声明的最后执行。

下回预告

下一回就到了初始HTTP服务的地方了,也是其中比较重要的一部分了。

下一篇就讲,敬请期待

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述