swag🌍 English ∙ 简体中文
Swag 将 Go 的注释转换为 Swagger2.0 文档。我们为流行的 Go Web Framework 创建了各种插件,这样可以与现有 Go 项目快速集成(使用 Swagger UI)。
目录
快速开始
支持的 Web 框架
如何与 Gin 集成
格式化说明
开发现状
声明式注释格式
通用 API 信息
API 操作
安全性
样例
多行的描述
用户自定义的具有数组类型的结构
响应对象中的模型组合
在响应中增加头字段
使用多路径参数
结构体的示例值
结构体描述
使用 swaggertype 标签更改字段类型
使用 swaggerignore 标签排除字段
将扩展信息添加到结构字段
对展示的模型重命名
如何使用安全性注释
项目相关
快速开始
将注释添加到 API 源代码中,请参阅声明性注释格式。
使用如下命令下载 swag:
1go install github.com/swaggo/swag/cmd/swag@latest
从源码开始构建的话,需要有 Go 环境(1.19 及以上版本)。
或者从 github 的 r ...
OpenSSL 深度实战指南
1. 核心概念与文件后缀在使用命令之前,必须理解 OpenSSL 操作的对象是什么。
后缀
全称
含义
内容
.key
Private Key
私钥
包含私有密钥信息,绝密,用于解密或签名。
.csr
Certificate Signing Request
证书签名请求
包含公钥和身份信息(CN, O 等),发送给 CA 进行签名。
.crt / .pem
Certificate
证书
包含公钥、身份信息、CA 的签名、有效期等。通常是 PEM 编码。
.der
Distinguished Encoding Rules
二进制证书
证书的二进制格式,无法直接用文本编辑器查看。
.pfx / .pkcs12
PKCS#12
证书包
包含证书链和私钥的加密打包文件,常用于 Windows/IIS/Java。
.cnf / .conf
Configuration
配置文件
定义 OpenSSL 行为、扩展属性(如 SAN)的文件。
注意:.pem 是一种编码格式(Base64 ...
第一部分:gRPC 的四种通信模式(通俗版)在写代码之前,我们必须先理解 gRPC 支持的四种“对话方式”。你可以把它们想象成人与人之间的交流:
模式
英文名
通俗比喻
数据流向
适用场景
1. 一元调用
Unary RPC
问答题客户端问一个问题,服务端答一个结果。
1 请求 → 1 响应
最常用。如:用户登录、查询余额。
2. 服务端流
Server Streaming RPC
看直播客户端点个播放,服务端源源不断发数据。
1 请求 → N 响应
如:股票行情推送、日志实时流。
3. 客户端流
Client Streaming RPC
传文件客户端分块发数据,发完后服务端给个结果。
N 请求 → 1 响应
如:大文件上传、批量数据导入。
4. 双向流
Bidirectional Streaming RPC
打电话双方随时可以说话,互不阻塞。
N 请求 ↔ N 响应
如:在线聊天室、游戏实时同步。
第二部分:环境准备(只需一次)在开始之前,请确保你的电脑安装了 Go 语言 和 Protobuf 编译器。
安装 Go 插件(用于生成 Go 代码):
12 ...
gorm
未读一、什么时候要用 Model?✅ 必须使用 Model 的场景
更新操作时
12345// ✅ 必须用 Model 指定要更新的表DB.Model(&User{}).Where("name = ?", "张三").Update("age", 26)// ❌ 错误:不知道要更新哪个表DB.Where("name = ?", "张三").Update("age", 26)
只想指定表名,不需要查询结果时
123456// 只指定表,进行聚合查询var count int64DB.Model(&User{}).Where("age > ?", 18).Count(&count)// 联合查询时指定主表DB.Model(&User{}).Joins("Profile").Find(&users)
使用 Updates 更 ...
grpc
未读gRPC 虽然性能强大,但它使用 HTTP/2 和 Protobuf(二进制) 协议。这导致了一个大问题:浏览器、Postman、前端 JavaScript 无法直接调用 gRPC 接口。
gRPC Gateway 就是为了解决这个问题而生的。
第一部分:什么是 gRPC Gateway?(通俗版)想象你开了一家高档餐厅(gRPC 服务):
内部厨房:只说“专业术语”(Protobuf),只用“内部对讲机”(HTTP/2)。效率高,但外人听不懂。
外部顾客:说“大众语言”(JSON),用“手机点餐”(HTTP/1.1)。
gRPC Gateway 就是“服务员/翻译官”:
顾客发 HTTP/JSON 请求给 Gateway。
Gateway 把 JSON 翻译成 Protobuf,把 HTTP 转成 gRPC。
Gateway 发给 gRPC 服务。
拿到结果后,再翻译回 JSON 给顾客。
核心价值:
对外:提供标准的 RESTful HTTP/JSON 接口(兼容浏览器、移动端)。
对内:微服务之间依然用高效的 ...
gRPC Metadata(元数据) 是 gRPC 通信中非常关键的概念。如果说 Protobuf 消息是信件内容,那么 Metadata 就是信封上的信息(如:寄件人、收件人、加急标记、邮戳)。
它主要用于传递 非业务数据,例如:认证 Token、链路追踪 ID、语言设置、请求来源等。
第一部分:核心概念(通俗版)
**键值对 (Key-Value)**:Metadata 本质是 map[string][]string。
Key:必须是 ASCII 小写字符(如 authorization, user-id)。
Value:是字符串切片 []string。这意味着一个 Key 可以对应多个 Value。
绑定 Context:Metadata 不能单独发送,必须附着在 context.Context 上。
方向性:
**Outgoing (发出)**:客户端发给服务端,或服务端回给客户端。
**Incoming (接收)**:服务端收到客户端的,或客户端收到服务端的。
特殊后缀:如果 Key 以 -bin 结尾(如 token-bin),表示这是二进制数据,gRPC 会自动 ...
如果把 gRPC 服务比作一家公司,业务逻辑是员工,那么拦截器就是前台、保安和审计员。
保安(认证拦截器):检查你有没有工牌(Token),没工牌不让进。
审计员(日志拦截器):记录谁在什么时候进了哪个房间,待了多久。
前台(熔断/限流):人太多了,先在外面排队。
拦截器的核心优势是:业务代码不需要关心这些杂事,拦截器统一处理。
下面我将通过 3 个循序渐进的 Demo,带你彻底掌握 gRPC 拦截器。
第一部分:前置准备为了专注讲解拦截器,我们简化 Proto 文件。
1. 定义 Proto (proto/auth.proto)123456789syntax = "proto3";package auth;message PingRequest { string msg = 1; }message PingResponse { string msg = 1; }service AuthService { rpc Ping (PingRequest) returns (PingResponse);& ...
🗂️ mapstructure 完全指南
💡 一句话理解:mapstructure 是一个能把 map(或 JSON、YAML 解析后的数据)自动填充到 Go 结构体的库。Viper、Consul、Terraform 等知名项目都在用它。
1. 为什么需要 mapstructure?❌ 没有 mapstructure 时:手动赋值,繁琐易错123456789101112131415161718data := map[string]interface{}{ "name": "张三", "age": 18, "email": "zhangsan@example.com",}// 手动一个个取,类型断言,还要判空...type User struct { Name string Age int Email string}user := User{ Name: dat ...
go专题
未读Go addlicense添加版权声明快速使用1.项目添加LICENSE文件12345678go install github.com/nishanths/license/v5@latestlicense -list # 查看支持的代码协议license -n 'lxy911(李星云) <lxyaa911@gmail.com>' -o LICENSE mit# 在项目根目录下执行ls LICENSE LICENSE
2.给源文件添加版本声明版权头信息保存的文件名,通常命名为:boilerplate。
新建boilerplate.txt文件
1234Copyright 2025 lxy911(李星云) <lxyaa911@gmail.com>. All rights reserved.Use of this source code is governed by a [MIT/Apache/BSD] style licensethat can be found in the LICENSE file.Project repository: ht ...
Go Air 详细讲解Air 是一个用于 Go 应用程序的实时重载工具,可以在代码更改时自动重建和重启应用程序,极大提高开发效率。
1. 安装方式一:使用 Go 安装1go install github.com/cosmtrek/air@latest
方式二:直接下载二进制文件12345678# Linuxcurl -fLo air https://git.io/linux_air# macOScurl -fLo air https://git.io/darwin_air# Windowscurl -fLo air.exe https://git.io/windows_air
方式三:使用包管理器12345678# macOS with Homebrewbrew install air# Windows with Scoopscoop install air# Arch Linux with yayyay -S air
2. 基本使用快速开始12345678# 在项目根目录执行air# 指定配置文件air -c .air.toml# 初始化配置文件air init
项目结构示例 ...


