• 技术文章 >后端开发 >Golang

    golang mysql操作介绍

    尚2020-02-26 17:39:25转载1802

    Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。下面就来由go入门教程栏目介绍一些关于mysql的操作。

    go操作mysql数据库,用的库是 go-sql-driver/mysql,安装直接go get

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

    sql.DB

    DB类型可用的函数有:

    1、Query(c string, args interface{} …) (*Rows, error),常用于SELECT语句

    2、Exec(c string, args interface{} …) (*Rows, error),常用与UPDATE和INSERT

    3、Prepare(c string) (*Stmt, error),其他语句,也可以用于执行上述语句,返回Stmt指针

    sql.Stmt

    Stmt是准备好的语句,可以执行数据库语句操作,常用函数有:

    Exec(args interface{} …) (Result, error),给定参数并执行准备好的语句,然后返回语句的总结果

    //...
    	stmt, err := db.Perpare("INSERT INTO User(user,pwd) VALUES (?, ?)")
    	if err != nil {
    		panic(err)
    	}
    	defer stmt.Close()
    	_, err := stmt.Exec("laoli", "123456")
    	if err != nil {
    		panic(err)
    	}
    //...
    //...
    	stmt, err := db.Perpare("DELETE FROM User")
    	if err != nil {
    		panic(err)
    	}
    	defer stmt.Close()
    	_, err := stmt.Exec()
    	if err != nil {
    		panic(err)
    	}

    Query(args interface{} …) (*Rows, error),给定参数并执行准备好的语句,返回行结果,比方说SELECT操作就必须用这个函数调用。

    sql.Rows

    Rows是sql语句执行返回的表,Rows会占用缓存,Rows.Next()里,如果返回false,则会自动释放缓存。
    看一下源码:

    // 源码
    func (rs *Rows) Next() bool {
    	var doClose, ok bool
    	withLock(rs.closemu.RLocker(), func() {
    		doClose, ok = rs.nextLocked()
    	})
    	if doClose {
    		rs.Close() //在这里释放掉了
    	}
    	return ok
    }

    例子:

    package main
    
    import (
    	"database/sql"
    	_ "github.com/go-sql-driver/mysql"
    )
    
    var db *sql.DB
    func mian() {
    	db = sql.Open("mysql", "root:123456@tcp(127.0.0.1)/test")
    	if err := db.Ping(); err != nil {
    		panic(err)
    	}
    }
    
    func Insert() {
    	_, err := db.Exec("INSERT INTO User(user, pwd) VALUE (?, ?)", "laowang", "123456")
    	if err != nil {
    		panic(err)
    	}
    }
    
    func SelectRow() {
    	rows, err := db.Query("SELECT * FROM User WHERE user=?", "laowang")
    	if err != nil {
    		panic(err)
    	}
    	//defer rows.Close() //如果后面代码没有循环调用rows.Next(),就需要手动在这里释放一下,不然会一直占用缓存
    	var user string
    	var pwd string
    	for rows.Next() {
    		row.Scan(&user, &pwd)
    	}
    	print(user, pwd)
    }

    更多go语言知识请关注php中文网go语言教程栏目。

    以上就是golang mysql操作介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:golang
    上一篇:go get命令下载扩展包的几点说明 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • golang如何判断目录是否存在• golang写爬虫乱码怎么办• golang找不到package怎么办• golang判断map是否存在key
    1/1

    PHP中文网