使用 zap 替换 xorm 的日志系统

使用 zap 替换 xorm 的日志系统 zap 是 uber 开发的快速日志。 使用 https://github.com/yxlimo/xormzap 这个简易的适配器即可 代码如下: log.go 工具类 package util import "go.uber.org/zap" var logger *zap.Logger func Log() *zap.Logger { if logger != nil { return logger } g, _ := zap.NewProduction() logger = g return logger } func L() *zap.SugaredLogger { if logger != nil { return logger.Sugar() } return Log().Sugar() } repo.go 基于 xorm 的简陋封装 package repo import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/yxlimo/xormzap" "xorm.io/xorm" "xorm.io/xorm/names" "yujinping.top/pams/util" ) var engine *xorm.Engine func Repo() *xorm.Engine { if engine != nil { return engine } var err error username := "root" password := "" host := "localhost" port := 3306 database……

阅读全文

go交叉编译生成跨平台应用

Go 交叉编译 Golang 支持交叉编译,可以在一个平台上编译生成另一个平台的可执行程序。 默认情况下,Go的runtime环境变量CGO_ENABLED=1,即默认开始cgo,允许你在Go代码中调用C代码 如果标准库中是在CGO_ENABLED=1情况下编译的,那么编译出来的最终二进制文件可能是动……

阅读全文

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,……

阅读全文

version of Delve is too old for Go version

在更新了 go 版本后,使用 GoLand 进行调试会报错 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.5 (maximum supported version 1.19) 这是因为 go 的版本升级后,相对 dlv 的版本就低了。 所以解决办法就是升级对应的 dlv 版本 进入到 GOPATH 中 如果忘记了 GOPATH 是什么,输入 go env GOPATH 即可。 在 GOPATH 对应目录下安装最新版的 dlv go install github.com/go-delve/delve/cmd/dlv@latest 安装完毕后,其被安装在 GOPATH/bin 目录下,即 GOPATH/bin/dlv 打开 GoLand 菜单栏 Help……

阅读全文

SpringBoot配置JSON格式的日志输出

前言 当应用被拆分为N多个微服务时,当系统遇到问题,能够准确的查看日志就成了一个非常现实的问题。 原因是以容器方式运行的服务可能分布在不同的服务器上,至少十几个的微服务,甚至更多。同时由于也不太可能给到研发人员所有的相关服务器权限, 因此,需要一个集中的日志查看分析的系统,这个系统就是……

阅读全文

使用maven运行jmeter测试脚本进行自动化接口测试-进阶

前言 承接上文 - 使用maven运行jmeter测试脚本进行自动化接口测试 本次主要增强了在自动化测试阶段的配置项,以及使用 jmeter gui 界面时的自动配置项。 使得gui 界面下与 非gui下自动测试的jmx脚本能够不做任何变更,即可在两种不同的环境下运行。使用gui界面更容易对脚本进行调试和测试。 检……

阅读全文

jmeter请求返回中文乱码的解决方案

问题现象 搭建自动测试服务器时,发现使用jmeter 访问接口,其返回的内容中文会乱码。同样的接口使用postman进行测试,则呈现良好无乱码。服务器端接口返回的编码是utf-8编码。 显然,应该是jmeter 对返回内容的解析与服务器端返回的编码不一致导致的。推测,postman应该是……

阅读全文

在docker-compose中启动redis并设置密码

docker-compose.yml redis: image: "redis:7.0.0-alpine" container_name: "redis" privileged: true ports: # docker容器redis默认端口号:6379 - "6379:6379" command: - redis-server - --requirepass - "your-password-here" 命令行方式 启动 docker 容器时携带参数 --requirepass your-password 即可……

阅读全文

MYSQL 8 上使用正则表达式获取字符串

问题 使用 Nacos 进行微服务配置管理的时候,要构建新的 docker container 用来打包所有的微服务,并暴露所有的端口。由于微服务数量比较多,其端口分别配置在自己所属的配置文件内。因此手工处理的话,耗时且难于保证准确。因此直接使用 nacos 的数据库,通过 sql 的办法取出端口号,就成为一个更好的解决方案。 解决 打开 nacos 的配置数……

阅读全文