最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang-gorm自動建表問題

 更新時間:2023年02月16日 17:00:07   作者:a...Z  
這篇文章主要介紹了golang-gorm自動建表問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

golang-gorm自動建表

定義結(jié)構(gòu)體

設(shè)置主鍵、自增、和獨立索引

聯(lián)合索引用addindex

type User struct {
?? ?//通過在字段后面的標簽說明,定義golang字段和表字段的關(guān)系
?? ?//例如 `gorm:"column:username"` 標簽說明含義是: Mysql表的列名(字段名)為username
?? ?//這里golang定義的Username變量和MYSQL表字段username一樣,他們的名字可以不一樣。
?? ?Id int64 `gorm:"column:username;not null;type:int(4) primary key auto_increment;comment:'用戶名'"`
?? ?Password string `gorm:"column:password;type:varchar(30);index:idx_name"`
?? ?//創(chuàng)建時間,時間戳
?? ?CreateTime int64 `gorm:"column:createtime"`
}

定義變化的表名

全局變量

var TablePre = "2021"

實現(xiàn)interface

func (u *User) TableName() string{
?? ?return "userss"+table
}

執(zhí)行sql

dbSlaveClient, err := gorm.GetClient(xxxx)
?? ?if err != nil {
?? ??? ?fmt.Println(err)
?? ?}

?? ?TablePre = "20210"
?? ?err = dbSlaveClient.Model(&User{}).Debug().
?? ??? ?AutoMigrate(&User{}).
?? ??? ?AddIndex("idx_cr_pass","createtime","password").Error

判斷是否有無

?if !dbSlaveClient.HasTable(&User{}) {
? ? dbSlaveClient.AutoMigrate(&User{})
? ? if dbSlaveClient.HasTable(&User{}) {
? ? ? fmt.Println("balance表創(chuàng)建成功")
? ? } else {
? ? ? fmt.Println("balance表創(chuàng)建失敗")
? ? }
? } else {
? ? fmt.Println("表已存在")
? }

GORM概述

官網(wǎng)文檔另人看的頭疼,還是記錄一些常用的api吧,基本都是復(fù)制官方文檔做些例子。

GORM給我最直觀的感受:程序員只需關(guān)系結(jié)構(gòu)體,操作結(jié)構(gòu)體,無需關(guān)注如何操作數(shù)據(jù)庫。

  • 優(yōu)點:提高開發(fā)效率
  • 缺點:使用反射犧牲性能,犧牲靈活性

GORM保護數(shù)據(jù)的安全,比如說結(jié)構(gòu)體刪除了某個字段,原來在數(shù)據(jù)庫中的表不會刪那個字段。結(jié)構(gòu)體指定改了表名,原來生成的表不會被刪除。其將有數(shù)據(jù)安全風(fēng)險的可能全部規(guī)避掉,交由開發(fā)人員手動去篩查。

概述

在這里插入圖片描述

  • 數(shù)據(jù)表 <===> 結(jié)構(gòu)體
  • 數(shù)據(jù)行 <===> 結(jié)構(gòu)體實例
  • 字段  <===> 結(jié)構(gòu)體字段

快速入門

  • db.AutoMigrate(&UserInfo{}):意思是自動遷移,自動遷移為給定模型運行自動遷移,只會添加缺少的字段,不會刪除/更改當前數(shù)據(jù)。就是說如果結(jié)構(gòu)體加了新的字段,會給表也加上新字段。
  • db.Create()傳遞一個結(jié)構(gòu)體,自動找到結(jié)構(gòu)體對應(yīng)的表,并將結(jié)構(gòu)體的值作為一條記錄插入表中,可以傳指針或者非指針,都可以。
  • db.First()傳遞一個結(jié)構(gòu)體的指針,自動找到結(jié)構(gòu)體對應(yīng)的表,并將表中第一條記錄賦值給結(jié)構(gòu)體,必須因為指針。
  • db.Find(out,where...)按照條件查詢,傳遞一個結(jié)構(gòu)體的指針,自動找到結(jié)構(gòu)體對應(yīng)的表,并按照where中的條件查詢記錄,賦值給結(jié)構(gòu)體。還有很多查詢的語法,后續(xù)再說。
  • db.Model().Update()傳遞一個查詢出來有值結(jié)構(gòu)體,通過Updata將其對應(yīng)的字段更新,并傳遞到表中。
  • db.Delete(&u)刪除傳遞進來的數(shù)據(jù)庫對應(yīng)的記錄。
package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

// UserInfo 用戶信息
type UserInfo struct {
	ID     uint
	Name   string
	Gender string
	Hobby  string
}

func main() {
	db, err := gorm.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	// 自動遷移
	db.AutoMigrate(&UserInfo{})

	u1 := UserInfo{1, "武旭飛", "男", "籃球"}
	u2 := UserInfo{2, "旭飛", "女", "足球"}
	// 創(chuàng)建記錄
	db.Create(&u1)
	db.Create(&u2)
	// 查詢第一條記錄
	var u = new(UserInfo)
	db.First(&u)
	fmt.Printf("%#v\n", u)
	// 按條件查詢
	var uu UserInfo
	db.Find(&uu, "hobby=?", "足球")
	fmt.Printf("%#v\n", uu)
	// 更新
	db.Model(&u).Update("hobby", "雙色球")
	// 刪除
	db.Delete(&u)
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go語言web框架Gin響應(yīng)客戶端的方式

    Go語言web框架Gin響應(yīng)客戶端的方式

    Gin是一個用Go語言編寫的web框架,它是一個類似于martini但擁有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍,本文給大家介紹了Go語言web框架Gin響應(yīng)客戶端有哪些方式,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-10-10
  • Golang語言實現(xiàn)gRPC的具體使用

    Golang語言實現(xiàn)gRPC的具體使用

    本文主要介紹了Golang語言實現(xiàn)gRPC的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Go?語言?json解析框架與?gjson?詳解

    Go?語言?json解析框架與?gjson?詳解

    這篇文章主要介紹了Go語言json解析框架與gjson,JSON?解析是我們不可避免的常見問題,在Go語言中,我們可以借助gjson庫來方便的進行json屬性的提取與解析,需要的朋友可以參考一下
    2022-07-07
  • 一文帶你了解Go語言實現(xiàn)的并發(fā)神庫conc

    一文帶你了解Go語言實現(xiàn)的并發(fā)神庫conc

    前幾天逛github發(fā)現(xiàn)了一個有趣的并發(fā)庫-conc,這篇文章將為大家詳細介紹一下這個庫的實現(xiàn),文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-01-01
  • 聊聊golang中多個defer的執(zhí)行順序

    聊聊golang中多個defer的執(zhí)行順序

    這篇文章主要介紹了golang中多個defer的執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 在Go中構(gòu)建并發(fā)TCP服務(wù)器

    在Go中構(gòu)建并發(fā)TCP服務(wù)器

    今天小編就為大家分享一篇關(guān)于在Go中構(gòu)建并發(fā)TCP服務(wù)器的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • golang時間/時間戳的獲取與轉(zhuǎn)換實例代碼

    golang時間/時間戳的獲取與轉(zhuǎn)換實例代碼

    說實話,golang的時間轉(zhuǎn)化還是很麻煩的,最起碼比php麻煩很多,下面這篇文章主要給大家介紹了關(guān)于golang時間/時間戳的獲取與轉(zhuǎn)換的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Go開源項目分布式唯一ID生成系統(tǒng)

    Go開源項目分布式唯一ID生成系統(tǒng)

    這篇文章主要為大家介紹了Go開源項目分布式唯一ID生成系統(tǒng)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 一文帶你了解如何正確理解和使用Golang中nil

    一文帶你了解如何正確理解和使用Golang中nil

    在?Golang?中,nil?是一個預(yù)定義的標識符,在不同的上下文環(huán)境中有不同的含義,但通常表示“無”、“空”或“零值”,本文主要來帶大家了解下nil的正確使用,需要的可以參考下
    2023-12-12
  • golang協(xié)程池模擬實現(xiàn)群發(fā)郵件功能

    golang協(xié)程池模擬實現(xiàn)群發(fā)郵件功能

    這篇文章主要介紹了golang協(xié)程池模擬實現(xiàn)群發(fā)郵件功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05

最新評論

元谋县| 额尔古纳市| 秭归县| 宜宾县| 长顺县| 舞钢市| 宝应县| 应城市| 桂阳县| 陆良县| 定州市| 富平县| 昌宁县| 米易县| 个旧市| 双流县| 昌图县| 霞浦县| 澳门| 新乡市| 安平县| 丹寨县| 星子县| 静宁县| 遂溪县| 当涂县| 桓仁| 浦县| 神农架林区| 临武县| 达日县| 民县| 通州区| 古蔺县| 孝感市| 浙江省| 尼玛县| 盐源县| 海南省| 祥云县| 西丰县|