简体   繁体   English

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

[英]How to share globally the MySQL driver on different handlers on GoLang

I want to call db from the different handlers, This is my mysql.go: package common 我想从不同的处理程序调用db,这是我的mysql.go:包常见

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): 这是我想要做的,但我不知道我如何将db从普通包调用到另一个包中(我试过common.db但它不起作用):

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..
}

You need to write your db var like this : 您需要像这样编写db var:

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 在Golang Capital中,字母意味着将其导出到包外。您可以在此处了解更多相关信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM