23.4.26 Go学习日记

文章介绍了如何安装和使用Swagger作为API文档生成工具,包括在GoGin框架中集成Swagger以实现交互式文档和测试,以及如何自定义MySQL的日志记录。通过示例展示了Swagger的注解方式和Gin中的路由配置,同时提到了MySQL连接的日志设置。
摘要由CSDN通过智能技术生成

1. Swagger的安装与使用

1.1 Swagger简介(来自ChatGPT)

        Swagger是一个开源且流行的api文档生成工具,它可以帮助开发团队在描述和分享api时提供更出色的体验。Swagger为用户提供了集中式的api文档托管器、互动式api文档以及api测试客户端等功能。它支持多种编程语言和框架,并可以根据api定义自动生成客户端库代码。通过Swagger,开发者能够更容易地理解和使用api,在加快应用程序的开发速度的同时也减少了错误率。

1.2 Swagger的安装

        首先在参照swag/README.md at master · swaggo/swag · GitHub中的内容,执行相应的go get 操作,但在执行到swag init之前,需要到将swag加入系统环境变量中( 一般swag的bin在Go的bin目录下),否则无法init:

 

        在init完成后,swagger会生成docs文件,主要是用于swagger的api文档配置(包括API的测试配置等):

1.3 Router层的处理

func Router() *gin.Engine {
	// 创建默认的gin.Engine对象
	r := gin.Default()
	docs.SwaggerInfo.BasePath = ""
	// 将swagger映射到对应路径
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	// 将相应方法映射到对应路径
	r.GET("/index", service.GetIndex)
	r.GET("/user/getUserList", service.GetUserList)
	r.GET("/product", service.GetProductList)
	return r
}

        加上了r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)),具体来说,这个语句是在使用gin-swagger库为gin应用程序提供swagger ui (rest api文档和测试界面)时所用到的。ginswagger提供了相应的函数和中间件来实现这个功能。

        其中,swaggerfiles.handlerswaggo库生成的用于访问swagger规范文件的http处理器。而ginswagger.wraphandler则可以将这个处理器包装成gin能够识别的处理器格式。这样一来,只需在gin应用程序中使用它就可以使用swagger-ui对rest api进行文档和测试了。

1.4 Service层的处理

        依照下列格式注释方法可以将方法的swagger属性注册到swagger(例如@Tags、@Router等),然后在命令行使用swag init来初始化swagger的各项配置文件,将属性注册到swagger:

// GetUserList 使用gin.Context获取JSON数据
// c是context
// @Tags 用户列表
// @Success 200 {string} json{"code", "message"}
// @Router /user/getUserList [get] 路径:/user/getUserList 方法get
func GetUserList(c *gin.Context) {
	users := make([]*models.UserBasics, 10)
	users = models.GetUserList()

	c.JSON(http.StatusOK, gin.H{
		"message": users,
	})
}

// GetProductList 使用gin.Context获取JSON数据
// c是context
// @Tags 商品列表
// @Success 200 {string} json{"code", "message"}
// @Router /product [get] 路径:/product 方法get
func GetProductList(c *gin.Context) {
	products := make([]*models.Product, 10)
	products = models.GetProductList()

	c.JSON(http.StatusOK, gin.H{
		"message": products,
	})
}

        注意,配置其他属性可以参考:swag/README.md at master · swaggo/swag · GitHub :

1.5 最终效果

        可以看到相应接口的测试结果:

       

2. Mysql的日志记录自定义

2.1 修改InitMysql

        添加日志格式如下:

func InitMysql() {
	// 打印Mysql日志
	newLogger := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags),
		logger.Config{
			SlowThreshold: time.Second, // 慢SQL阈值
			LogLevel:      logger.Info, // 级别
			Colorful:      true,        // 彩色
		},
	)
	DB, _ = gorm.Open(mysql.Open(viper.GetString("mysql.dsn")), &gorm.Config{Logger: newLogger})
	fmt.Println("Mysql init!")
}

2.2 最终效果

         

3. 总结

        今天学习了API测试工具Swagger的配置以及基本使用,除此之外还新增了Mysql日志记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值