1. c *gin.Context 是什么
Gin 为每个请求创建的临时管家/工具箱,用于处理请求和返回响应。
go
复制代码
func CreateTodo(c *gin.Context) {
// c 是 Gin 自动传给你的 Context
}
2. 四种获取数据方式
| 方法 |
数据来源 |
URL 示例 |
c.Param("id") |
URL 路径 :id |
/users/5 |
c.Query("name") |
URL 查询 ?name= |
/search?name=zhangsan |
c.ShouldBindJSON(&body) |
请求体 Body |
不在 URL 里 |
c.GetHeader("Authorization") |
请求头 Header |
不在 URL 里 |
3. 结构体标签 json:"title"
双向翻译官:
go
复制代码
type Todo struct {
Title string `json:"title"`
}
| 方向 |
过程 |
| 输入 |
JSON "title" → 装入 Go 的 Title |
| 输出 |
Go 的 Title → 转成 JSON "title" |
4. Body 是什么
HTTP 请求的"身体",用来装数据,不在 URL 里。
bash
复制代码
curl ... -d '{"title":"学Gin"}'
go
复制代码
var body struct {
Title string `json:"title"`
}
c.BindJSON(&body) // 把 Body 装进结构体
// body.Title = "学Gin"
5. 函数签名标准格式
go
复制代码
func 函数名(参数名 参数类型) 返回值类型 {
// 函数体
}
// 示例
func Register(c *gin.Context) { ... } // 无返回值
func Init(file string) error { ... } // 有返回值
func Add(a int, b int) int { return a + b } // 有参数有返回值
6. 库函数来源
| 函数 |
来源 |
c.Query(), c.JSON() |
Gin 框架 (*gin.Context 方法) |
db.Create(), db.Find() |
GORM 框架 |
ini.MapTo() |
go-ini 库 |
fmt.Println() |
Go 标准库 |
7. ini.MapTo 配置加载
go
复制代码
ini.MapTo(Conf, file)
// 第一个参数:目标结构体(被填入)
// 第二个参数:配置文件(提供数据)
// 根据 `ini:"..."` 标签自动对应
8. new 和全局变量
go
复制代码
var Conf = new(AppConfig)
new:分配内存并返回指针
var 在函数外:全局变量,整个包共享
- 传指针 → 改原本,传值 → 改副本
9. GORM v1 vs v2
| 功能 |
v1 |
v2 |
| 导入 |
github.com/jinzhu/gorm |
gorm.io/gorm |
| 连接 |
gorm.Open("mysql", dsn) |
gorm.Open(mysql.Open(dsn), &gorm.Config{}) |
| Ping |
DB.DB().Ping() |
直接 return nil 或 sqlDB.Ping() |
10. CRUD 速查
| 操作 |
HTTP 方法 |
GORM 方法 |
| 增 |
POST |
db.Create(&x) |
| 查 |
GET |
db.Find(&xs) / db.First(&x, id) |
| 改 |
PUT |
db.Save(&x) |
| 删 |
DELETE |
db.Delete(&x, id) |