1、安装swag
go get -u github.com/swaggo/swag/cmd/swag
2、安装gin-swagger
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files
3、代码例子

package main

import (
   "github.com/gin-gonic/gin"
   docs "github.com/go-project-name/docs"
   swaggerfiles "github.com/swaggo/files"
   ginSwagger "github.com/swaggo/gin-swagger"
   "net/http"
)
// @BasePath /api/v1

// PingExample godoc
// @Summary ping example
// @Schemes
// @Description do ping
// @Tags example
// @Accept json
// @Produce json
// @Success 200 {string} Helloworld
// @Router /example/helloworld [get]
func Helloworld(g *gin.Context)  {
   g.JSON(http.StatusOK,"helloworld")
}

func main()  {
   r := gin.Default()
   docs.SwaggerInfo.BasePath = "/api/v1"
   v1 := r.Group("/api/v1")
   {
      eg := v1.Group("/example")
      {
         eg.GET("/helloworld",Helloworld)
      }
   }
   r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
   r.Run(":8080")

}

4、访问地址
http://localhost:8080/swagger/index.html


生成doc文档用法(官方说明文档): 运行swag init, 默认会在main.go目录下生成docs文件夹.

swag init -h
NAME:
   swag init - Create docs.go

USAGE:
   swag init [command options] [arguments...]

OPTIONS:
   --generalInfo value, -g value          API通用信息所在的go源文件路径,如果是相对路径则基于API解析目录 (默认: "main.go")
   --dir value, -d value                  API解析目录 (默认: "./")
   --exclude value                        解析扫描时排除的目录,多个目录可用逗号分隔(默认:空)
   --propertyStrategy value, -p value     结构体字段命名规则,三种:snakecase,camelcase,pascalcase (默认: "camelcase")
   --output value, -o value               文件(swagger.json, swagger.yaml and doc.go)输出目录 (默认: "./docs")
   --parseVendor                          是否解析vendor目录里的go源文件,默认不
   --parseDependency                      是否解析依赖目录中的go源文件,默认不
   --parseDependencyLevel, --pdl          对'--parseDependency'参数进行增强, 是否解析依赖目录中的go源文件, 0 不解析, 1 只解析对象模型, 2 只解析API, 3 对象模型和API都解析 (default: 0)
   --markdownFiles value, --md value      指定API的描述信息所使用的markdown文件所在的目录
   --generatedTime                        是否输出时间到输出文件docs.go的顶部,默认是
   --codeExampleFiles value, --cef value  解析包含用于 x-codeSamples 扩展的代码示例文件的文件夹,默认禁用
   --parseInternal                        解析 internal 包中的go文件,默认禁用
   --parseDepth value                     依赖解析深度 (默认: 100)
   --instanceName value                   设置文档实例名 (默认: "swagger")

模型定义:

type TestModel struct {
    // 名称
    Name int `json:"name" example:"名称"`
}

台风天,只好待在家。
本来还想着出去骑车的,好久没有出去溜达。
深圳的天气是牛马的天气,每逢周末不是下雨就是台风天。
在家刷小说,困了就睡,醒了继续刷。

由于赶进度,今天尝试用ai来写完这次需求迭代的所有接口,从开始运行到结束不到10几分钟,就把这19个接口写完了。当然,完成后有一些修正和补充,主要也是初始阶段没有把需求和详细实现定义得很清楚导致的,如果描述清楚,完成度会更高。
按正常手搓代码应该要至少1-2天的,这种效率的提升,实在不由得惊叹ai的强大。刚开始对ai介入工作方面,还是有所控制的,但这次带给我的反馈,看来要转换下这个观念了。
后续也要重新捡起下关于软件工程架构方面的设计体系,前期所有的设计,从需求定义、数据建模、详细实现、非功能约束,测试等,把这些细节描述越详细,最终ai的实现会给你一个更好的体验。

今天在工作的时候,我又一次失去对自己脾气的控制。
工作上,有些事情其实双方都可以做的,为什么一定纠结要我这边来处理呢,其实我这边处理也没关系,只是一听到别人总是以一种纠结暗示方式要求我这边来处理,我总是忍不住这个气。
其实前段时间,我已经一直提醒自己要克制这方面的脾气了,但是今天还是爆发了,也许我该找些别的方式来开解自己。
我不想因为这些事情,对别人恶言恶语。但是生活工作总是这样,不断重复些零零碎碎,碰撞出微星火花,瞬间点燃我的暴脾气。

有那么一刹那,尽管从未拥有, 但那个身影消失在午夜暗淡灯光的时候,一种仿佛失去了千万次的感觉.
so many times, so lost.
知不可乎骤得,托遗响于悲风