package common
import (
"database/sql"
"fmt"
"os"
"os/signal"
"syscall"
_ "github.com/go-sql-driver/mysql"
)
var Db *sql.DB
func init() {
dsn := "user:passwd@tcp(127.0.0.1:port)/database"
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(10)
Db = db //将Db赋值为全局
//守护进程,如果进程退出就执行关闭的操作
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, os.Interrupt, os.Kill, syscall.SIGTTOU, syscall.SIGTERM)
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
close(sigs)//关闭channel
Db.Close()
fmt.Println("退出")
//TODO 需要优化的点
os.Exit(0)
}()
}
如何使用
func QueryRowDemo(id int64) (*Notification, error) {
sqlStr := "select notice_warn_id,code from asap_operate_notice_warn where notice_warn_id=?"
stmt, err := common.Db.Prepare(sqlStr)//主要是这里直接导包然后调用就行
if err != nil {
log.Fatal(err)
return nil, err
}
defer stmt.Close()
var u Notification
err = stmt.QueryRow(id).Scan(&u.NotificationId, &u.Code)
switch {
case err == sql.ErrNoRows:
log.Fatalf("no notice with id %d", id)
return nil, err
case err != nil:
log.Fatal(err)
return nil, err
default:
log.Printf("username is %s\n", u.Code)
return &u, err
}
}