Goswagger - Skipping '', recursion detected

问题:当使用的结构体为嵌套格式,会提示 recursion detected 或 cannot find type definition go 1 2 3 4 5 6 7 8 9 10 11 type Instance struct { metav1.TypeMeta Instances []InstanceItem `json:"instances" yaml:"instances" form:"instances" binding:"required"` ServiceSelector map[string]string `json:"serivce_selector" yaml:"serivce_selector" form:"serivce_selector"` } type InstanceItem struct { Name string `json:"name" yaml:"name" form:"name" binding:"required"` PromEndpoint string `json:"prom_endpoint" yaml:"prom_endpoint" form:"prom_endpoint" binding:"required"` Labels map[string]string `json:"labels" yaml:"labels" form:"labels"` } go swagger 注释为 text 1 2 3 4 5 6 7 8 9 10 // deleteInstance godoc // @Summary Remove prometheus instance....

 ·  · 

Gin - 参数默认值问题

遇到问题:gin 使用 Bind 时无法填充,改成下面代码可以获取到 go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 type User struct { Name string `form:"name,default=user1" json:"name,default=user2"` Age int `form:"age,default=10" json:"age,default=20"` } r := gin.Default() // way1 curl 127.0.0.1:8900/bind?name=aa // way2 curl -X POST 127.0.0.1:8900/bind -d "name=aa&age=30" // way3 curl -X POST 127.0.0.1:8900/bind -H "Content-Type: application/json" -d "{\"name\": \"aa\"}" r....

 ·  · 

Gorm - BeforeDelete无法获取正确条目

遇到问题:BeforeDelete 在删除时获取 SQL 不正确 BeforeDelete 代码如下 go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 func (t *Target) BeforeDelete(tx *gorm.DB) (err error) { // 找到与此 Target 相关的所有 Labels var labels []Label if err := tx.Model(t).Association("Labels").Find(&labels); err != nil { klog.V(4).Infof("Error fetching labels: %v", err) return err } for _, label := range labels { if err := tx.Delete(&label).Error; err != nil { klog....

 ·  · 

Go每日一库 - 使用 gin + goswagger 构建 REST API 文档

OpenAPI 什么是OpenAPI Swagger 是一套围绕 OpenAPI 规范构建的开源工具,可帮助我们设计,构建,记录和使用 REST API。 OpenAPI 规范(前名称为 Swagger 规范)是 REST API 的 API 描述格式。包括: 可用端点 ( 例如 /users) 以及每个 endpoint 上的操作 (例如 GET /users, POST /users) 操作参数,每个操作的输入和输出 认证方法 联系信息,许可证,使用条款等其他信息。 什么是 Swagger? Swagger 是一组围绕 OpenAPI 规范构建的开源工具,有助于用户设计,构建,记录和使用 REST API,支持整个 API 生命周期的开发,从设计和文档到测试和部署。 使用 Swagger 的目的 标准化文档格式:Swagger (OpenAPI) 采用了准化 API 文档格式。通过使用 Swaggo(将注释转换为 Swagger2.0文档的包) 生成 Swagger 文档,Swagger 的结构化格式的文档,使开发人员更容易理解产品的 API 交互。 交互式文档体验:Swagger UI 与 Swaggo 集成,提供交互式且用户友好的界面,用于测试 API。Swaggo提供了一个自动生成的界面,允许开发人员浏览 Endpoint,查看请求/响应示例,甚至可以直接从文档执行 API 请求。这种交互式体验可提高开发人员的工作效率并加速 API 的采用。 自动且最新的文档:Swaggo 可自动从用户的 Go 代码生成 API 文档。这种自动化无需手动维护单独的文档文件。Swaggo 直接从用户的代码库中提取信息,包括 endpoint 详细信息,请求/响应模型和注释。使用这种方法可确保用户的 API 文档随着代码的更新而保持最新。 Swagger 与 Gin 的集成 拉取 Swaggo 使用如下命令下载swag...

 ·  · 

Go设计模式

创建型模式 工厂模式 概念说明 工厂模式 (factory pattern) 是在父类中提供一个创建对象的方法,是用于创建不同类型的对象,而无需指定对象的真实的类 工厂模式的特点: 对客户端隐藏对象创建的复杂逻辑 可以通过修改工厂类来创建对象而不影响客户端代码 提供创建对象的单一来源。 单个工厂类用以各组件保持一致性。 允许子类创建对象类型 图:工厂设计模式的示意图 Source:https://www.techcrashcourse.com/2015/10/factory-design-pattern.html 图片说明: Owl, Eagle, Sparrow 类都必须实现 Brid 接口, 该接口声明了一个名为 fly() 的方法。 每个类都将以不同的方式实现该方法。而使用工厂模式后的代码机构则为图所示,当 Owl, Eagle, Sparrow 实现了共同的接口,就可以将其对象传递给客户代码, 而无需提供额外数据。 而 “调用工厂方法的代码” 称为 “客户端代码”,这样可以做到 “不需要了解不同子类返回实际对象之间的差别”。客户端代码将所有 Brid Sanctuary 视为抽象的 Brid ,这样 ”客户端代码“ 知道所有鸟类对象都提供 fly() 方法, 但是并不关心其实现方式。 代码实现 brid.go go 1 2 3 4 5 package main type Brid interface { Fly() } Owl.go go 1 2 3 4 5 type Owl struct {} func (g *Owl) Fly() { fmt....

 ·  ·