GORM 操 MySQLGORM 是 Go 语言中一个功能强大的 ORM 库,支持 MySQL 等多种数据库。它简化了数据库操作,提供模型定义、迁移、CRUD、关联、钩子、事务等功能。本教程基于 GORM 官方文档,旨在帮助你达到能独立开发项目的水平。我们将逐步讲解核心概念、代码示例和最佳实践。假设你有基本的 Go 知识和 MySQL 环境。
1. 安装 GORM 和 MySQL 驱动首先,在你的 Go 项目中安装 GORM 核心库和 MySQL 驱动:
12go get -u gorm.io/gormgo get -u gorm.io/driver/mysql
最佳实践:使用 Go Modules 管理依赖,确保项目中使用一致的版本。安装后,导入包:import "gorm.io/gorm" 和 import "gorm.io/driver/mysql"。
2. 连接到 MySQL 数据库连接是第一步,使用 gorm.Open 函数和 DSN(Data Source Name)字符串。
DSN 格式标准 DSN 示例:
1user:pas ...
go专题
未读go-redis笔记go-redis 是 Go 语言中用于操作 Redis 数据库的流行客户端库。以下是学习和使用 go-redis 时需要掌握的 必学知识点,涵盖核心概念、常用功能和最佳实践:
1. 基础知识(1) 安装和引入
安装:使用以下命令安装 go-redis 库:
1go get github.com/redis/go-redis/v9
引入:在代码中引入库:
1import "github.com/redis/go-redis/v9"
(2) 连接 Redis
创建客户端:通过 redis.NewClient 创建 Redis 客户端。
1234567891011121314151617181920import ( "context" "github.com/redis/go-redis/v9")func main() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ ...
go专题
未读go配置管理viperViper 提供了丰富的 API 来处理配置管理的各种场景,下面详细讲解其常用 API 及核心功能:
安装1go get github.com/spf13/viper
简介Viper,直译为眼镜蛇,是一个针对 go 应用程序的完整的配置文件解决方案,可以处理几乎所有类型的配置需求和格式,方便管理项目的配置文件,并且具有以下特色:
默认值设置
支持格式 JSON, TOML, YAML, HCL, envfile,Java properties
支持实时监测和重载配置文件
支持环境变量中读取
支持远程配置系统读取配置并监测变化
支持读取命令行标记
支持缓冲区读取
支持显示设置值
一、常用 API 及功能详解1. 配置读取相关 API
Get(key string) interface{}:获取任意类型的配置值
GetString(key string) string:获取字符串类型
GetInt(key string) int:获取整数类型
GetBool(key string) bool:获取布尔类型
GetFloat64(key str ...
gin学习笔记官方文档:Gin Web Framework (gin-gonic.com)
仓库地址:gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang)
官方示例:gin-gonic/examples: A repository to host examples and tutorials for Gin. (github.com)
gin常用API
类别
API 方法
描述
路由引擎创建与配置
gin.New() *gin.Engine
创建一个空白的路由引擎,不包含默认中间件
路由引擎创建与配置
gin.Default() *gin.Engine
创建一个默认路由引擎,内置 Logger 和 Recovery 中间件
路由引擎创建与配置
r.Run(addr …string) error
启动 HTTP 服务器
路由引擎创建与配置
r.RunTLS(addr string, certFile string, keyFile string) error
启动 HT ...
那些年踩过的坑
未读Go编译运行时的一些坑一.Golang编译运行缓慢的解决方法原因:在最近的Windows11更新中,微软给用户更新了一个类似于杀毒软件的服务进程PCManager Serivice Store,该进程会对于go代码的编译和运行进行强制检查,消耗大量的cpu和运存时间,导致go语言代码运行效率底下。对此,只需要在服务进程中将其停止运行即可。
罪魁祸首就是下图这个微软电脑管家
解决方法:多的不说,直接删除,本人9.21亲测有效
以管理员身份运行powershell,运行以下脚本,一键复制粘贴解决
1234567891011121314151617181920212223242526272829303132333435363738394041# ===============================# 强制删除 Microsoft PC Manager# ===============================Write-Host "=== 停止并删除 PC Manager 服务 ===" -ForegroundColor Cyan$services = ...
jwt
一.JWT简介官方仓库:golang-jwt/jwt: Community maintained clone of https://github.com/dgrijalva/jwt-go
官方文档:jwt package - github.com/golang-jwt/jwt/v4 - Go Packages
一、JWT 是什么 & 工作原理JWT(JSON Web Token) 是一种开放标准(RFC 7519),用于在客户端和服务端之间安全地传递 JSON 格式的信息。
结构: JWT 分为三部分,用 . 连接:
1Header.Payload.Signature
Header(头部)
声明类型(JWT)和算法(HS256、RS256 等)。
1234{ "alg": "HS256", "typ": "JWT"}
Payload(负载)
存放业务信息,比如用户 ID、用户名、过期时间等。
12345{ ...
casbin一.常用APICasbin 在 Go 里常用的 API,这些 API 都是围绕 Enforcer(执行器)来操作的。
1. Enforcer 初始化123456789// 从模型文件 + 策略文件e, _ := casbin.NewEnforcer("model.conf", "policy.csv")// 从模型文件 + Adapter(如 MySQL)a, _ := gormadapter.NewAdapter("mysql", "root:123@tcp(127.0.0.1:3306)/")e, _ := casbin.NewEnforcer("model.conf", a)// 加载策略(必须调用)e.LoadPolicy()
2. 权限校验123456ok, err := e.Enforce("alice", "data1", "read")if ok { fmt.Println(&q ...
go日志库
一.📌 Go zap 日志速查表1. 安装1go get go.uber.org/zap
2. 创建 Logger123logger, _ := zap.NewDevelopment() // 开发模式 (console, 带颜色)logger, _ := zap.NewProduction() // 生产模式 (JSON, 适合采集)defer logger.Sync()
3. 两种 Logger12sugar := logger.Sugar() // 语法糖,易用logger.Info("严格模式日志") // 强类型,性能好
4. 日志级别(从低到高)zap 默认 日志级别过滤机制:低于设定级别的日志不会输出。
方法
说明
Debug
调试日志
Info
信息日志
Warn
警告
Error
错误
DPanic
开发模式 panic
Panic
记录并 panic
Fatal
记录并退出程序
5. Sugared Logger 用法12sugar.Infof("用户 %s 登 ...
go发送邮件
🚀 Go 发送邮箱验证码 (基于 gomail)安装依赖1go get gopkg.in/gomail.v2
后端代码 (main.go)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596package mainimport ( "encoding/json" "log" "math/rand" "net/http" "time" "gopkg.in/gomail.v2")// 邮件配置const ( smtpHost = "smtp.example.com" // SMTP 服务器地址,例如 smtp.qq.co ...
go生成验证码一.两种验证码实现方法 Go 里比较常见的验证码实现方式主要有两种:
方案一:使用 github.com/dchest/captcha步骤
引入依赖
1go get github.com/dchest/captcha
生成验证码
调用 captcha.NewLen(6) 生成验证码 ID(6 位长度)。
通过 captcha.WriteImage(w, id, width, height) 输出 PNG 图片。
校验验证码
使用 captcha.VerifyString(id, userInput) 进行验证。
前端展示
前端 <img src="/captcha/image?id=xxx"> 显示验证码图片。
提交时携带 id + code 调用 /captcha/verify 接口验证。
思路
dchest/captcha 直接在后端生成 PNG 图片,前端 <img> 标签展示。
适合传统 Web 项目,结构清晰。
优点:简单、稳定、广泛使用。
缺点:只能输出图片,不方便前端组件化或跨端(比如 Ap ...

