如何搭建golang框架
本文在介绍关于搭建golang框架的基础上,重点探讨了初始化日志、配置入口文件以及测试文件的方法,步骤简单易上手操作,文章内容步步紧凑,希望大家根据这篇文章可以有所收获。
入口文件
func main() { config.InitConfig() logger.InitLogger()}
暂且忽略一些实现细节,我们需要先初始化配置和日志,先来看看日志,我选用Uber的zap日志库。来看看日志模块怎么写?
日志package loggerimport ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2")var l *zap.Loggerfunc InitLogger(logPath, logLevel string) error { hook := lumberjack.Logger{ Filename: logPath, MaxSize: 1024, MaxBackups: 3, MaxAge: 7, Compress: true, } w := zapcore.AddSync(&hook) var level zapcore.Level switch logLevel { case "debug": level = zap.DebugLevel case "info": level = zap.InfoLevel case "error": level = zap.ErrorLevel default: level = zap.DebugLevel } encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder core := zapcore.NewCore( zapcore.NewConsoleEncoder(encoderConfig), w, level, ) l = zap.New(core) return nil}func GetLogger() *zap.Logger { return l}
我们先定义一个包级的全局变量l,类型是*zap.Logger,并创建了InitLogger和GetLogger这两个函数。因为,zap不支持日志归档,所以在InitLogger中定义了一个lumberjack的hook,用来归档日志。我们可以看到InitLogger这个方法有两个入参:logPath和logLevel。一般来讲,这些参数应该是放在配置文件里的,接下来我们来写配置。
配置我们简单地创建一个config.json文件来存放配置:
config.json:
{ "log_config": { "log_path": "{your_path}", "log_level": "debug" }}
然后在config.go中创建相应的结构体,之后定义InitConfig和GetConfig方法,在InitConfig方法中,我读取了配置文件的内容,然后解析到结构体中,并处理了错误,如果有错误信息的话,我会将错误信息包裹一层,方便以后的错误定位。InitConfig有一个入参,就是配置文件的路径,这个参数我会从命令行中获取。
config.go:
package configimport ( "encoding/json" "github.com/pkg/errors" "io/ioutil")type LogConfig struct { LogPath string `json:"log_path"` LogLevel string `json:"log_level"`}type Config struct { LogConfig LogConfig `json:"log_config"`} var conf Configfunc InitConfig(configPath string) error { configFile, err := ioutil.ReadFile(configPath) if err != nil { err = errors.Wrap(err, "Read config file failed.") return err } err = json.Unmarshal(configFile, &conf) if err != nil { err = errors.Wrap(err, "Unmarshal config file failed.") return err } return nil}func GetConfig() Config { return conf}
我们当然不止这么一点配置,我们还有数据库、缓存等配置没有添加,但不急,我们先理出一个路线,之后的配置可以依葫芦画瓢。
调整入口文件好,日志和配置的初始化大致写好了,我们回过头来看一下入口文件的调整:
package mainimport ( "flag" "fmt" "github.com/TomatoMr/awesomeframework/config" "github.com/TomatoMr/awesomeframework/logger" "os")func main() { var configPath string flag.StringVar(&configPath, "config", "", "配置文件路径") flag.Parse() if configPath == "" { fmt.Printf("Config Path must be assigned.") os.Exit(1) } var err error err = config.InitConfig(configPath) if err != nil { fmt.Printf("Init config failed. Error is %v", err) os.Exit(1) } logConfig := config.GetConfig().LogConfig err = logger.InitLogger(logConfig.LogPath, logConfig.LogLevel) if err != nil { fmt.Printf("Init logger failed. Error is %v", err) os.Exit(1) } logger.GetLogger().Info("Init success.")}
我们调整了入口文件,从命令行里获取配置文件路径,之后初始化了配置和日志,最后打印初始化结果。
测试一下首先,编译一下:
$ go build
接着修改一下你的config.json文件的log_path,然后在命令行指定一下你的配置文件路径:
$ awesomeframework --config={$your_path}/config.json
最后,来看一下运行正不正常,日志文件的打印如下:
2020-01-19T20:41:57.506+0800 info Init success.
看完上述内容,你们掌握搭建golang框架的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。