包含标签 gin 的文章

go使用embed嵌入静态资源

第一步构建 vue project 可以创建一个简单的vue3 + vite 的项目。 编译时,需要将发布路径设置为 /public/ ,完成后,将 dist 文件夹移动到 go 项目的根文件夹。 嵌入资源文件 嵌入资源文件主要是使用 Go 1.16后增加的编译 //go:embed 预编译方式。 我使用的是 Go 1.18.3 版本。 修改 main.go package main import ( "embed" "io/fs" "net/http" ) // 注意 嵌入文件夹的时候,要使用 dist/** 形式告诉编……

阅读全文

go使用匿名结构体嵌入时警告

现象 使用gin + jwt-go 做jwt验证的时候,写下如下结构体 type CustomClaims struct { Name string `json:"name"` UserId string `json:"userId"` // StandardClaims结构体实现了Claims接口(Valid()函数) jwt.StandardClaims }初始化结构体 func (c *LoginController) generateToken(user entity.User) (string, error) { // 构造SignKey: 签名和解签名需要使用一个值 j := helper.NewJWT() // 构造用户claims信息(负荷) claims := helper.CustomClaims{ user.RealName,……

阅读全文

go泛型简化数据库读取操作

前提 go 语言已经发布了 1.18 带有正式泛型的版本,但很多文章都仍旧只是限于官方的 Add(数学加减法) 泛型函数例子。因此本文尝试使用泛型来简化数据库操作这一个过程,深入了解及使用这个新版的泛型。当然其中的实现都以简单为主,当做使用泛型的可用例子。 注意本文使用 gorm 作为基础的数据库访问工具,当然……

阅读全文

go web 接口返回time.Time类型数据的格式化

使用自定义类型并重写 JSON 序列化和反序列化的方法 Go Web 接口结构体 type User struct { Id uint64 `json:"id"` Username string `json:"username"` Password string `json:"password"` CreateTime time.Time `json:"createTime"` }接口输出 createTime 字段的时候其格式并不符合我们的习惯。可以使用类型别名的方式重写 JSON 的两个方法: MarshalJSON() ([]byte, error) UnmarshalJSON(data []byte) error package types import ( "fmt" "time" ) type DateTime time.Time func (d DateTime) MarshalJSON() ([]byte, error) { // 重写time转换成json之后的格式 var str = fmt.Sprintf("\"%s\"", time.Time(d).Format("2006-01-02T15:04:05")) return []byte(str), nil }……

阅读全文

go使用条件编译的形式集成swagger

安装 swag-go 的依赖 首先在项目根目录安装 swag-go 的依赖: go install github.com/go-openapi/swag并在项目根目录执行生成 swagger 文档命令 swag init在 routers 包内创建 swagger.go: //go:build doc // +build doc /** * 注意条件编译注释 //go:build doc 只能出现在代码文件的最顶部(这是Go 1.17的新的条件编译语法),不建议再使用//+……

阅读全文