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删除
程序员必备接口测试调试工具:点击使用
Apipost = Postman + Swagger + Mock + Jmeter
Api设计、调试、文档、自动化测试工具
网页生成APP,用做网站的技术去做APP:立即创建
手机网站开发APP、自助封装APP、200+原生模块、2000+映射JS接口按需打包
相关文章
相关视频