Maison > développement back-end > Golang > le corps du texte

Quelle base de données Golang utilise-t-il ?

藏色散人
Libérer: 2020-02-01 14:43:18
original
5340 Les gens l'ont consulté

Quelle base de données Golang utilise-t-il ?

Quelle base de données Golang utilise-t-il

Aujourd'hui, je vais brièvement présenter comment Golang utilise la base de données MySQL ? Étant donné que Go lui-même ne fournit pas de pilote de base de données spécifique, il fournit uniquement une interface et une gestion du pilote. Chaque pilote de base de données doit être implémenté par un tiers et enregistré dans la gestion des pilotes dans Go. Il existe plusieurs pilotes mysql sur github. Celui que j'ai choisi ici :

https://github.com/go-sql-driver/mysql

Ce qui suit présente principalement l'utilisation de MySQL dans le langage Go sous les aspects d'ajout, de suppression, de modification et autres

1 Se connecter à la base de données

Utiliser. la fonction sql.Open() Ouvrez la connexion à la base de données. Le format de la chaîne de connexion à la base de données (dsn) est le suivant :

admin:123456@tcp(10.2.1.5)/irisapp
Copier après la connexion

Le code est le suivant :

func (f *mysql_db) mysql_open() {
    db, err := sql.Open("mysql", dbusername+":"+dbpassword+"@tcp("+dbhostsip+")/"+dbname)
    if err != nil {
        fmt.Println("链接失败")
    }
    fmt.Println("链接成功")
    f.db = db
}
Copier après la connexion

2. Insérez

func (f *mysql_db) mysql_insert() { //insert  添加数据
    fmt.Println("开始插入")
    stmt, err := f.db.Prepare("INSERT INTO depart(departName,memo) VALUES(?,?)")
    //defer stmt.Close()
    if err != nil {
        fmt.Println("插入失败")
        return
    }
    stmt.Exec("dd", "adadcccda")
    fmt.Println("插入成功")
}
Copier après la connexion

3. Requête

func (f *mysql_db) mysql_select(sql_data string) {   //select 查询数据
    fmt.Println("sql:", sql_data)
    rows, err := f.db.Query(sql_data)
    if err != nil {
        fmt.Println("查询失败")
    }
    for rows.Next() {
        var departID int
        var departName string
        var memo string
        err = rows.Scan(&departID, &departName, &memo)
        if err != nil {
            panic(err)
        }
        fmt.Println("departName:", departName)
    }
}
Copier après la connexion

4. >5. Supprimer

func (f *mysql_db) mysql_update() { //update  修改数据
    stmt, err := f.db.Prepare("update depart set departName=?,memo =? where departId=?")
    //defer stmt.Close()
    if err != nil {
        //错误处理
    }
    result,_ := stmt.Exec("aa","asdfadsadsfa",1)
    if result == nil {
        fmt.Println("修改失败")
    }
    affect_count,_ := result.RowsAffected()    //返回影响的条数,注意有两个返回值
    fmt.Println("%v",affect_count)
}
Copier après la connexion

6. Choses

func (f *mysql_db) mysql_delete() { //delete  删除数据
    stmt, err := f.db.Prepare("delete from depart where departId=?")
    //defer stmt.Close()
    if err != nil {
        //错误处理
    }
    stmt.Exec(2)     //不返回任何结果
    fmt.Println("删除成功")
}
Copier après la connexion

Appelez

func (f *mysql_db) mysql_tran(){
    //事务
    tx,err := f.db.Begin()        //声明一个事务的开始
    if err != nil {
        fmt.Println(err)
        return
    }
    insert_sql := "insert into depart (departName,memo) VALUES(?,?)"
    insert_stmt,insert_err := tx.Prepare(insert_sql)
    if insert_err != nil {
        fmt.Println(insert_err)
        return
    }
    insert_res,insert_err := insert_stmt.Exec("ff","ff")
    last_insert_id,_ := insert_res.LastInsertId()
    fmt.Println(last_insert_id)
    // defer tx.Rollback()            //回滚之前上面的last_login_id是有的,但在回滚后该操作没有被提交,被回滚了,所以上面打印的Last_login_id的这条数据是不存在与数据库表中的
    tx.Commit()                        //这里提交了上面的操作,所以上面的执行的sql 会在数据库中产生一条数据
}
Copier après la connexion

et la sortie après le démarrage est comme suit :

func main() {
    db := &mysql_db{}
    db.mysql_open()
    db.mysql_insert()
    db.mysql_update()
    db.mysql_delete()
    db.mysql_tran()
    db.mysql_select("select departID,departName,memo from depart")
    db.mysql_close() //关闭
}
Copier après la connexion

Code complet

D:\Go_Path\go\src\mysqldemo>go run mysqldemo.go
链接成功
开始插入
插入成功
0
删除成功
10
sql: select departID,departName,memo from depart
departName: aa
departName: dd
departName: dd
departName: dd
departName: dd
departName: dd
departName: ff
departName: dd
departName: ff
Copier après la connexion

Résumé

Prend en charge les expressions de préparation, qui peuvent être utilisées pour optimiser. Requêtes SQL pour améliorer les performances et réduire le risque d'injection SQL, db.Prepare() et tx.Prepare prennent en charge les expressions préparées. 2. LastInsertId() Obtenez l'identifiant du premier élément inséré

3. RowsAffected() Obtenez le nombre d'éléments concernés/insérés

4. Brève introduction à go L'utilisation de base de MySQL dans le développement du langage Go dans le développement du langage En fait, dans le processus de développement réel, les frameworks tiers liés à l'ORM sont principalement utilisés, mais les principes sous-jacents doivent encore être appris.

Pour plus de connaissances sur le langage Go, veuillez prêter attention à la colonne

Tutoriel sur le langage Go

sur le site Web PHP chinois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal