概述:
在学习GORM过程中,总是在调用结构体和文件导入这里出错,所以整理了以下文档用于梳理变量/结构体命名规则和import导入的知识点
一、变量/结构体命名规则
变量/结构体都遵守同样的命名规则:可见性由首字母大小写决定
-
大写首字母:公开的(可导出的)其他包可以访问它。
-
小写首字母:私有的(不可导出的) 只能在定义它的包内部访问
命名变量
变量命名应遵循Go的命名惯例,一般使用驼峰式命名法
。局部变量通常使用小写字母开头(user),而导出的结构体使用大写开头(User)。这样命名后,你可以直接使用包名加类型名的方式在其他包中引用这些类型或函数。
附录 基本规则
小驼峰 aVar:局部变量(包括函数参数)
大驼峰 AndVar:导出的变量/结构体、类型、函数、方法等
二、GROM实际案例
下面是如何在main.go中导入并使用/models包中的User结构体的具体步骤:
1、定义User结构体
假设有一个(位于/models/user.go)文件,其中定义了User结构体:
注:这里因为User是大写的,表明是可以导出的
// 文件路径: /models/user.go
package modelstype User struct {Name stringAge int
}
2、 在main.go中导入User结构体,以及对应的操作
在main.go中,你可以这样导入并使用User结构体:
···
package mainimport ("fmt""your-module-name/models" // 替换成自己的模块名
)func main() {var user models.Useruser.Name = "Alice"user.Age = 30fmt.Println(user)
}
总结
在main.go中使用models包中的User结构体,你需要先导入models包,然后使用models.User
来创建User
实例。确保User结构体是导出的(即首字母大写),这样才能在包外部访问它。
三、结构体中的公开和私有字段
//path:/models/user.go
type User struct {Name string // 公开字段age int // 私有字段
}
公开和私有字段类似 java对象 的public和private属性:
公开字段:能自由地读取和修改
值
私有字段:不能直接读取或修改值
//path:main.go
func main() {user := models.User{Name: "Alice"}user.Name = "Bob" // 可以修改,因为 Name 是公有字段// user.age = 30 // 编译错误,不能修改,因为 age 是私有字段fmt.Println(user.Name)//fmt.Println(user.age)//错误
}
四、GORM中的gorm.Model和自动迁移功能
1 gorm.Model、
//path:/models/user.go
type User struct {gorm.ModelUsername stringPassword string
}
User
结构体包含嵌入字段gorm.Model
:一个嵌入式基础模型,GORM会自动为你的数据库表添加y一些基础字段:
- ID:唯一标识符,主键
- CreatedAt:被创建的时间
- UpdatedAt:最后一次更新的时间
- DeletedAt:被删除的时间,用于支持
软删除
(标记为删除而非DB实际删除)
3、 GORM自动迁移技术
GORM自动迁移功能:根据go程序中定义的结构体创建对应的数据库表
//连接数据库db, err := gorm.Open(sqlite.Open("gotest1.db"), &gorm.Config{})//使用Gorm自动迁移功能db.AutoMigrate(&models.User{})
4、硬删除和软删除
- 硬删除:实际地从数据库删除
- 软删除:没有实际擅长,只是设置DeletedAt为当前时间,标记为已删,在查询中会被GORM忽略