douzhannao5357 2017-01-10 22:01
浏览 109
已采纳

如何在GoLang的不同处理程序上全局共享MySQL驱动程序

I want to call db from the different handlers, This is my mysql.go: package common

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

var db *sql.DB
var err error

//db connection
func connectDB() {
    db, err = sql.Open("mysql", "root@tcp(localhost:3306)/mysqlapi")
    if err != nil {
        fmt.Println(err.Error())
    }
    defer db.Close()

    //test connection
    err = db.Ping()
    if err != nil {
        fmt.Println(err.Error())
    }

    //table migration
    stmt, err := db.Prepare("CREATE TABLE person (id int NOT NULL AUTO_INCREMENT, first_name varchar(40), last_name varchar(40), PRIMARY KEY (id));")
    if err != nil {
        fmt.Println(err.Error())
    }
    _, err = stmt.Exec()
    if err != nil {
        fmt.Println(err.Error())
    } else {
        fmt.Println("Person Table successfully migrated....")
    }

}

this is what i want to do, but i don't know how i call db from common package into a different package (i tried common.db but it doesn't works):

package models

import (
    "github.com/colombia9503/RESTful-Mysql/common"
)

type User struct {
    Id         int
    First_Name string
    Last_Name  string
}

var Users = new(users)

type users struct{}

func (users) SelectAll() ([]*User, error) {
    var users []*User
    rows, err := common.db.Query("select id, first_name, last_name from person;")
    if err != nil {
        panic(err)
    }

    for rows.Next() {
        some code..
    }
    return users, err
}

func (users) SelectOne(id string) (*User, error) {
    some code..
}

func (users) Insert(name, last_name string) (*User, error) {
    some code..
}

func (users) Update(id, name, last_name string) error {
    some code..
}

func (users) Delete(id string) error {
    some code..
}
  • 写回答

1条回答 默认 最新

  • douxuzui4590 2017-01-10 22:35
    关注

    You need to write your db var like this :

    package common
    
    import (
        "database/sql"
        "fmt"
    
        _ "github.com/go-sql-driver/mysql"
    )
    
    var Db *sql.DB
    var Err error
    

    In Golang Capital letter means exporting it to outside of the package.you can learn more about this here

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题