邗江區(qū)城鄉(xiāng)建設局網站數(shù)據分析軟件
概述:
在學習GORM過程中,總是在調用結構體和文件導入這里出錯,所以整理了以下文檔用于梳理變量/結構體命名規(guī)則和import導入的知識點
一、變量/結構體命名規(guī)則
變量/結構體都遵守同樣的命名規(guī)則:可見性由首字母大小寫決定
-
大寫首字母:公開的(可導出的)其他包可以訪問它。
-
小寫首字母:私有的(不可導出的) 只能在定義它的包內部訪問
命名變量
變量命名應遵循Go的命名慣例,一般使用駝峰式命名法
。局部變量通常使用小寫字母開頭(user),而導出的結構體使用大寫開頭(User)。這樣命名后,你可以直接使用包名加類型名的方式在其他包中引用這些類型或函數(shù)。
附錄 基本規(guī)則
小駝峰 aVar:局部變量(包括函數(shù)參數(shù))
大駝峰 AndVar:導出的變量/結構體、類型、函數(shù)、方法等
二、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
來創(chuàng)建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會自動為你的數(shù)據庫表添加y一些基礎字段:
- ID:唯一標識符,主鍵
- CreatedAt:被創(chuàng)建的時間
- UpdatedAt:最后一次更新的時間
- DeletedAt:被刪除的時間,用于支持
軟刪除
(標記為刪除而非DB實際刪除)
3、 GORM自動遷移技術
GORM自動遷移功能:根據go程序中定義的結構體創(chuàng)建對應的數(shù)據庫表
//連接數(shù)據庫db, err := gorm.Open(sqlite.Open("gotest1.db"), &gorm.Config{})//使用Gorm自動遷移功能db.AutoMigrate(&models.User{})
4、硬刪除和軟刪除
- 硬刪除:實際地從數(shù)據庫刪除
- 軟刪除:沒有實際擅長,只是設置DeletedAt為當前時間,標記為已刪,在查詢中會被GORM忽略