安装和配置gorm过程中遇到的问题
安装
1 2
| go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite
|
快速入门
泛型 API (>= v1.30.0)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package main
import ( "context" "gorm.io/driver/sqlite" "gorm.io/gorm" )
type Product struct { gorm.Model Code string Price uint }
func main() { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("连接数据库失败") }
ctx := context.Background()
db.AutoMigrate(&Product{})
err = gorm.G[Product](db).Create(ctx, &Product{Code: "D42", Price: 100})
product, err := gorm.G[Product](db).Where("id = ?", 1).First(ctx) products, err := gorm.G[Product](db).Where("code = ?", "D42").Find(ctx)
err = gorm.G[Product](db).Where("id = ?", product.ID).Update(ctx, "Price", 200) err = gorm.G[Product](db).Where("id = ?", product.ID).Updates(ctx, Product{Code: "D42", Price: 100})
err = gorm.G[Product](db).Where("id = ?", product.ID).Delete(ctx) }
|
传统 API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package main
import ( "gorm.io/driver/sqlite" "gorm.io/gorm" )
type Product struct { gorm.Model Code string Price uint }
func main() { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("连接数据库失败") }
db.AutoMigrate(&Product{})
db.Create(&Product{Code: "D42", Price: 100})
var product Product db.First(&product, 1) db.First(&product, "code = ?", "D42")
db.Model(&product).Update("Price", 200) db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
db.Delete(&product, 1) }
|
更换代理
1 2
| go env -w GOPROXY=https://goproxy.cn,direct go env -w GOSUMDB=sum.golang.org
|
这是国内最稳定的代理
输入
如果输出的是 https://goproxy.cn,direct,说明配置已经彻底生效,你现在可以放心地去敲 go mod tidy 或者 go get 下载依赖,不会再出现 404 报错了!
如果有报错的话,大概率是环境变量已经在系统环境变量那边写死了,你得去那边找到GOPROXY环境变量然后修改掉
go mod tidy作用
go mod tidy 是 Go 语言项目的 “依赖管家”。
结合你刚刚换好代理的环境,现在执行它非常合适。简单来说,它的核心作用是让你的 go.mod 和 go.sum 文件跟你的实际代码完全保持一致。
它可以帮你自动做以下 3 件具体的事:
1. 自动“补货”(添加缺失的包)
如果你在代码里写了 import "gorm.io/gorm",但是 go.mod 文件里还没有这个包,go mod tidy 就会自动帮你把这个包的最新兼容版本加进去,并下载到本地。
2. 自动“扔垃圾”(移除没用的包)
如果你以前测试时下载了某个包,后来代码里删掉了,但 go.mod 里还留着记录。执行 go mod tidy,它会自动把多余、没用的依赖删掉,保持 go.mod 文件非常干净。
3. 生成加密校验(更新 go.sum)
除了写进 go.mod,它还会把下载的包的版本哈希值写入 go.sum 文件。这个文件的作用是保证你项目里的依赖包绝对安全、没被篡改过。
实操建议(代替 go get)
很多新手喜欢用 go get -u gorm.io/gorm,这很容易因为网络原因或者版本混乱报 404 错误。
最佳实践是:
- 在你的代码编辑器(比如 GoLand)里,直接在
main.go 或者别的 .go 文件里敲下:
- 保存文件后,直接在终端执行:
原理:go mod tidy 会扫描你写好的所有代码,由 Go 编译器自己去判断应该用哪个版本最好,而不是你靠直觉手动去指定。这样下载下来的依赖最稳定,也不会踩到 +incompatible 这种老版本的坑。
所以,现在换好代理之后,直接执行 go mod tidy 就能立刻解决你的 GORM 下载问题!