在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Golang連接MySQL

馬哥Linux運維 ? 來源:51CTO ? 2024-01-08 09:42 ? 次閱讀

Go連接MySQL

首先我們來看如何使用Golang連接MySQL

安裝所需要的驅動

go get github.com/go-sql-driver/mysql

導入所需要使用的包

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

連接MySQL需要使用的語句

func main() {
    //"用戶名:密碼@[連接方式](主機名:端口號)/數據庫名"
    db, _ := sql.Open("mysql", "root:pwd@(localhost)/database") // 設置連接數據庫的參數
    defer db.Close()                                            //關閉數據庫
    err := db.Ping()                                            //連接數據庫
    if err != nil {
        fmt.Println("Open database fail !")                             //連接失敗
        return
    }
    fmt.Println("Connection succdess !")                             //連接成功
}

案例演示

建表

先在MySQL中創建一個名為test的數據庫,在此數據庫中創建一個user表,包含五個字段id, name, age, sex, phone,并插入幾條數據,推薦使用 Navicat等圖形化管理工具,不用麻煩地在 MySQL 命令行寫SQL語句。表如下:

1bae6982-ad48-11ee-8b88-92fbcf53809c.jpg

連接MySQL

將數據庫的相關配置寫成常量,創建InitDB函數用于連接數據庫,創建Query函數用于查詢數據,全部代碼如下:

package main


import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
  "github.com/pkg/errors"
  "strings"
)


// 數據庫配置
const (
  userName = "root"
  password = "******"
  ip       = "127.0.0.1"
  port     = "3306"
  dbName   = "test"
)


// Db數據庫連接池
var DB *sql.DB


type User struct {
  id    int64
  name  string
  age   int8
  sex   int8
  phone string
}


// 注意方法名大寫,就是public
func InitDB() {
  //構建連接:"用戶名:密碼@tcp(IP:端口)/數據庫?charset=utf8"
  path := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
  //打開數據庫,前者是驅動名,所以要導入: _ "github.com/go-sql-driver/mysql"
  DB, _ = sql.Open("mysql", path)
  //設置數據庫最大連接數
  DB.SetConnMaxLifetime(100)
  //設置上數據庫最大閑置連接數
  DB.SetMaxIdleConns(10)
  //驗證連接
  if err := DB.Ping(); err != nil {
    fmt.Println("open database fail !")
    return
  }
  fmt.Println("connnection success !")
}


// 查詢操作
func Query() {
  var user User
  rows, e := DB.Query("select * from user where id in (1,2,3)")
  if e == nil {
    errors.New("query incur error")
  }
  for rows.Next() {
    e := rows.Scan(&user.sex, &user.phone, &user.name, &user.id, &user.age)
    if e != nil {
      fmt.Println(user.sex, user.phone, user.name, user.id, user.age)
    }
  }
  rows.Close()
}


func main() {
  InitDB()
  Query()
  defer DB.Close()
}

以上是使用Golang連接MySQL數據庫的基礎方法,接下來我們看Gorm是如何連接MySQL。

Gorm

什么是ORM

對象關系映射 :Object-Relational Mapping,用于在關系數據庫和面向對象編程語言的堆之間轉換數據。這樣就創建了一個虛擬的對象數據庫,可以從編程語言內部使用。

ORM提供了自動支持,用于將元組映射到對象并返回,同時考慮所有這些差異。問題的核心在于將對象的邏輯表示轉換為能夠存儲在數據庫中的原子形式,同時保留對象的屬性和它們之間的關系,以便在需要時可以重新加載為對象。如果實現了這種存儲和檢索功能,則稱這些對象是持久的。

優點

提高開發效率,減少開發成本

使開發更加面向對象

可移植性

可以輕松引入額外功能,如數據緩存。

加快開發速度 - 消除了重復的SQL代碼的需要。

減少開發時間、成本

克服特定于供應商的SQL差異 - ORM知道如何編寫特定于供應商的SQL

缺點

在學習使用ORM時會損失生產力

失去了對代碼實際執行內容的理解 - 使用SQL時,開發人員更能控制

ORM有變慢的傾向

ORM無法與復雜查詢的SQL查詢競爭

Grom介紹

Gorm是一種功能強大且對開發人員友好的ORM庫,支持主流的數據庫。

GORM 官方支持的數據庫類型有:MySQL, PostgreSQL, SQLite, SQL Server 和 TiDB

安裝

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

連接MySQL

和基本的連接方法區別不大

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)


func main() {
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

**注意:**想要正確的處理time.Time,您需要帶上parseTime參數, (更多參數) 要支持完整的 UTF-8 編碼,您需要將charset=utf8更改為charset=utf8mb4查看此文章獲取詳情

GORM MODEL 定義

在使用ORM工具時,我們需要在代碼中定義模型(Models)與數據庫中的數據表進行映射,模型是標準的 struct,由 Go 的基本數據類型、實現了Scanner和Valuer接口的自定義類型及其指針或別名組成

約定

GORM 傾向于約定優于配置 默認情況下,GORM 使用ID作為主鍵,使用結構體名的蛇形復數作為表名,字段名的蛇形作為列名,并使用CreatedAt、UpdatedAt字段追蹤創建、更新時間

如果您遵循 GORM 的約定,您就可以少寫的配置、代碼。如果約定不符合您的實際要求, GORM 允許你配置它們

gorm.Model

GORM 定義一個gorm.Model結構體,其包括字段ID、CreatedAt、UpdatedAt、DeletedAt

// gorm.Model 的定義
type Model struct {
  ID        uint           `gorm:"primaryKey"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt gorm.DeletedAt `gorm:"index"`
}

您也可以將其嵌入到自己的結構體當中,如下:

type User struct {
  gorm.Model
  Name string
}
// 等效于
type User struct {
  ID        uint           `gorm:"primaryKey"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt gorm.DeletedAt `gorm:"index"`
  Name string
}

當然您也可以完全使用自己定義的結構體,不一定需要使用它的model

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3799

    瀏覽量

    64388
  • 函數
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62610
  • MySQL
    +關注

    關注

    1

    文章

    809

    瀏覽量

    26565
  • GitHub
    +關注

    關注

    3

    文章

    471

    瀏覽量

    16442

原文標題:Go操作數據庫與Gorm講解

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在Rust中連接和使用MySQL數據庫

    如何在Rust中連接和使用MySQL數據庫。 安裝 mysql 模塊 這里我們假設你已經安裝了Rust編程語言工具鏈,在本教程中,我們將使用 mysql crate來
    的頭像 發表于 09-30 17:05 ?1674次閱讀

    labview 連接mysql 數據庫的問題

    `我根據網絡上的教程想用labsql 做個連接mysql的vi,但是就是連接不上數據庫。(已經新建數據源DSN)求教下,字符串 3,4 是不是哪里寫錯了? 后面的程序部分有問題嗎?本人初學,謝謝DSN=mysqldriver是
    發表于 01-07 22:06

    labview連接mysql數據庫失敗,原因何在。

    `使用ODBC連接mysql時,測試連接成功;但是使用labview連接mysql時,測試連接
    發表于 11-29 17:02

    采用hqC連接mysql數據庫

    eclipse連接mysql(80)的版本問題
    發表于 04-30 10:27

    Labview連接Mysql學習筆記分享

    論壇上有很多分享Labview與access連接的資料。但是對于MySQL則比較少,尤其是連接遠程的MySQL.MySQL由于其免費性和高效性,被廣泛使用。學會如何
    發表于 06-04 16:27

    Golang怎么實現UTS隔離

    Golang實現UTS隔離
    發表于 08-23 14:44

    Golang調用MySQL存儲過程解析

    Golang 調用MySQL存儲過程
    發表于 06-05 17:42

    如何使用原生hqc連接MySQL數據庫

    springboot項目中使用原生hqc連接MySQL數據庫
    發表于 06-08 12:12

    c#如何連接mysql數據庫

    (visual studio)c#連接mysql數據庫
    發表于 06-13 20:56

    mysql數據導出golang實現

    mysql數據導出為excel文件,golang實現:首先下載依賴到的三方庫:Simple install the package to your $GOPATH
    發表于 10-21 15:14

    ESP8266如何連接mysql數據庫

    各位大神,我試圖用ESP8266 連接mysql ,將溫濕度傳感器的數據,寫入數據庫。mysql數據庫已建好,在局域網中的其他電腦也可以正常訪問;Arduino中是有mysql con
    發表于 01-12 09:22

    初探Golang內聯

    今天我們來聊聊 Golang 中的內聯。
    的頭像 發表于 12-13 09:51 ?941次閱讀

    GoLang的安裝和使用

    GoLang的安裝和使用
    的頭像 發表于 01-13 14:06 ?1275次閱讀
    <b class='flag-5'>GoLang</b>的安裝和使用

    【芒果派MangoPi MQ Quad】使用Golang點燈

    使用Golang在芒果派上點燈
    的頭像 發表于 07-21 14:44 ?698次閱讀
    【芒果派MangoPi MQ Quad】使用<b class='flag-5'>Golang</b>點燈

    eclipse怎么連接數據庫mysql

    連接Eclipse和MySQL數據庫可以通過JDBC(Java Database Connectivity)來實現。以下是詳細步驟: 下載并安裝MySQL數據庫:你首先需要下載并安裝MySQL
    的頭像 發表于 12-06 11:06 ?1308次閱讀
    主站蜘蛛池模板: 日韩欧美亚洲一区| 污污的黄色小说| 国产在线麻豆自在拍91精品| 婷婷丁香六月天| 免费国产黄网站在线观看视频| 91久久青草精品38国产| 在线免费视频网站| 黄色片链接| 色屁屁www影院免费观看视频| 91网站免费在线观看| 色婷婷在线观看视频| 97就要鲁就要鲁夜夜爽| 欧美黄色三级| 色多多官网| 午夜国产福利在线| 亚洲精品在线视频观看| 免费性视频| 毛片高清一区二区三区| 欧美黄色片在线播放| 99久久久久国产精品免费| 黄色三级三级三级免费看| 国产精品午夜在线观看| 天堂资源在线播放| 夜色福利视频| 男男失禁play 把尿bl| 久久成人亚洲| 2021国产成人精品久久| 色婷婷综合久久久中文字幕| 亚洲操| 欧美不卡在线视频| 精品欧美一区二区三区在线观看| 国产手机视频在线| 天堂在线观看| 天天爽夜夜爽夜夜爽| 9久热久re爱免费精品视频| 国产高清视频在线播放www色| 激情六月丁香| 久久一级毛片| 欧美69xx| 久久精品94精品久久精品| 91久久人澡人人添人人爽|