1. 程式人生 > >Go 操作mysql使用舉例---連接本地數據庫

Go 操作mysql使用舉例---連接本地數據庫

sockets unix cnblogs err ini oca .cn ive RoCE

連接數據庫的方式有兩種:TCP和Unix域socket。
本文使用Unix domain sockets連接數據庫。關於TCP連接數據庫可以參考Go 操作mysql使用舉例

package main

import (
    "database/sql"
    "fmt"
    "log"

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

)

type DBConnectionInfo struct {
    ID  []byte
    User    string
    Host    string
    DB  []byte 
    Cmd string
    Time    []byte
    State   string
    Info    []byte
}

func(f *DBConnectionInfo) String() string{

    return fmt.Sprintf("ID:%s, User:%s, Host:%s, DB:%s, Cmd:%s, Time:%s, State:%s, Info:%s", string(f.ID), f.User, f.Host, string(f.DB), f.Cmd, string(f.Time), f.State, string(f.Info))

}

const (
    mysqlShowProcessList="show processlist"
)
var DB *sql.DB

//var dataBase = "root:Aa123456@unix(/tmp/mysql.sock)/mysql"
var dataBase = "root:Aa123456@unix(/tmp/mysql.sock)/"

func Init() {
    var err error
    DB, err = sql.Open("mysql", dataBase)
    if err != nil {
        log.Fatalln("open db fail:", err)
    }

    err = DB.Ping()
    if err != nil {
        log.Fatalln("ping db fail:", err)
    }
}

func main() {

    Init()

    query()

}


func query() {

    rows, err := DB.Query(mysqlShowProcessList)
    if err != nil {
        log.Println("query failed:", err)
        return
    }
    defer rows.Close()

    for rows.Next(){
        data := &DBConnectionInfo{}
        if err := rows.Scan(&data.ID, &data.User, &data.Host, &data.DB, &data.Cmd, &data.Time, &data.State, &data.Info); err != nil {
            log.Println("Scan failed:", err)
        }

        fmt.Println("data:", data)
    }


}

output:

data: ID:145, User:root, Host:localhost, DB:, Cmd:Sleep, Time:632, State:, Info:
data: ID:172, User:root, Host:localhost, DB:, Cmd:Query, Time:0, State:starting, Info:show processlist

參考

https://blog.csdn.net/lanyang123456/article/details/79831537

https://www.cnblogs.com/hanyouchun/p/6708037.html

Go 操作mysql使用舉例---連接本地數據庫