在学习GORM过程中,总是在调用结构体和文件导入这里出错,所以整理了以下文档用于梳理变量/结构体命名规则和import导入的知识点
变量/结构体都遵守同样的命名规则:可见性由首字母大小写决定
大写首字母:公开的(可导出的)其他包可以访问它。
小写首字母:私有的(不可导出的) 只能在定义它的包内部访问
命名变量
变量命名应遵循Go的命名惯例,一般使用驼峰式命名法。局部变量通常使用小写字母开头(user),而导出的结构体使用大写开头(User)。这样命名后,你可以直接使用包名加类型名的方式在其他包中引用这些类型或函数。
小驼峰 aVar:局部变量(包括函数参数)
大驼峰 AndVar:导出的变量/结构体、类型、函数、方法等
下面是如何在main.go中导入并使用/models包中的User结构体的具体步骤:
假设有一个(位于/models/user.go)文件,其中定义了User结构体:
注:这里因为User是大写的,表明是可以导出的
// 文件路径: /models/user.go
package models
type User struct {
Name string
Age int
}
在main.go中,你可以这样导入并使用User结构体:
···
package main
import (
"fmt"
"your-module-name/models" // 替换成自己的模块名
)
func main() {
var user models.User
user.Name = "Alice"
user.Age = 30
fmt.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)//错误
}
//path:/models/user.go
type User struct {
gorm.Model
Username string
Password string
}
User结构体包含嵌入字段gorm.Model:一个嵌入式基础模型,GORM会自动为你的数据库表添加y一些基础字段:
软删除(标记为删除而非DB实际删除)GORM自动迁移功能:根据go程序中定义的结构体创建对应的数据库表
//连接数据库
db, err := gorm.Open(sqlite.Open("gotest1.db"), &gorm.Config{})
//使用Gorm自动迁移功能
db.AutoMigrate(&models.User{})