欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang-gorm自動(dòng)建表問(wèn)題

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

golang-gorm自動(dòng)建表

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

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

聯(lián)合索引用addindex

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

定義變化的表名

全局變量

var TablePre = "2021"

實(shí)現(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

判斷是否有無(wú)

?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)體,無(wú)需關(guān)注如何操作數(shù)據(jù)庫(kù)。

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

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

概述

在這里插入圖片描述

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

快速入門(mén)

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

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

// UserInfo 用戶(hù)信息
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()

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

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

總結(jié)

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

相關(guān)文章

  • golang高并發(fā)系統(tǒng)限流策略漏桶和令牌桶算法源碼剖析

    golang高并發(fā)系統(tǒng)限流策略漏桶和令牌桶算法源碼剖析

    這篇文章主要介紹了golang高并發(fā)系統(tǒng)限流策略漏桶和令牌桶算法源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go設(shè)置http請(qǐng)求超時(shí)的方法實(shí)現(xiàn)

    Go設(shè)置http請(qǐng)求超時(shí)的方法實(shí)現(xiàn)

    這篇文章主要介紹了Go設(shè)置http請(qǐng)求超時(shí)的方法實(shí)現(xiàn),最近接手了一個(gè)老項(xiàng)目進(jìn)行維護(hù),發(fā)現(xiàn)其中有個(gè)關(guān)于 http 請(qǐng)求的方法設(shè)置的 timeout 沒(méi)有生效,很奇怪,一開(kāi)始查看代碼并沒(méi)有發(fā)現(xiàn)什么可疑點(diǎn),后查看了源碼,打斷點(diǎn)調(diào)試才發(fā)現(xiàn)問(wèn)題所在,這里簡(jiǎn)單記錄復(fù)盤(pán)一下
    2024-08-08
  • Go gRPC環(huán)境安裝教程示例詳解

    Go gRPC環(huán)境安裝教程示例詳解

    這篇文章主要為大家介紹了Go gRPC環(huán)境安裝的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • golang?run時(shí)報(bào)undefined錯(cuò)誤的解決

    golang?run時(shí)報(bào)undefined錯(cuò)誤的解決

    這篇文章主要介紹了golang?run時(shí)報(bào)undefined錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用Go語(yǔ)言與MQTT進(jìn)行通信的示例代碼

    使用Go語(yǔ)言與MQTT進(jìn)行通信的示例代碼

    本文介紹了如何使用 Go 編程語(yǔ)言與 MQTT(Message Queuing Telemetry Transport)進(jìn)行通信,MQTT 是一種輕量級(jí)的消息傳輸協(xié)議,廣泛應(yīng)用于物聯(lián)網(wǎng)和實(shí)時(shí)通信場(chǎng)景,通過(guò)本文的指導(dǎo),您將學(xué)習(xí)如何使用 Go 語(yǔ)言創(chuàng)建 MQTT 客戶(hù)端,進(jìn)行消息的發(fā)布和訂閱,需要的朋友可以參考下
    2023-12-12
  • Go模板后端渲染時(shí)vue單頁(yè)面沖突

    Go模板后端渲染時(shí)vue單頁(yè)面沖突

    go后端模版語(yǔ)法是通過(guò) {{}} ,vue也是通過(guò)雙花括號(hào)來(lái)渲染的,如果使用go渲染vue的html頁(yè)面的時(shí)候就會(huì)報(bào)錯(cuò),本文主要介紹了Go模板后端渲染時(shí)vue單頁(yè)面沖突,感興趣的可以了解一下
    2024-01-01
  • 如何在Go中使用Casbin進(jìn)行訪(fǎng)問(wèn)控制

    如何在Go中使用Casbin進(jìn)行訪(fǎng)問(wèn)控制

    這篇文章主要介紹了如何在Go中使用Casbin進(jìn)行訪(fǎng)問(wèn)控制,Casbin是一個(gè)強(qiáng)大的、高效的開(kāi)源訪(fǎng)問(wèn)控制框架,其權(quán)限管理機(jī)制支持多種訪(fǎng)問(wèn)控制模型,Casbin只負(fù)責(zé)訪(fǎng)問(wèn)控制
    2022-08-08
  • 讓Go反射變快的方法實(shí)例探究

    讓Go反射變快的方法實(shí)例探究

    反射允許你在運(yùn)行時(shí)獲得有關(guān) Go 類(lèi)型的信息,如果你曾經(jīng)愚蠢地嘗試編寫(xiě) json.Unmarshal 之類(lèi)的新版本,本文將探討的就是如何使用反射來(lái)填充結(jié)構(gòu)體值
    2024-01-01
  • Golang模擬令牌桶進(jìn)行對(duì)訪(fǎng)問(wèn)的限流方式

    Golang模擬令牌桶進(jìn)行對(duì)訪(fǎng)問(wèn)的限流方式

    這篇文章主要介紹了Golang模擬令牌桶進(jìn)行對(duì)訪(fǎng)問(wèn)的限流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 基于gin的golang web開(kāi)發(fā):路由示例詳解

    基于gin的golang web開(kāi)發(fā):路由示例詳解

    這篇文章主要介紹了基于gin的golang web開(kāi)發(fā):路由示例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論