esempio di connessione e metodi di base

package main
import (
    "database/sql"
    "time"
    _ "github.com/go-sql-driver/mysql"
    "log"
    "fmt"
)
/*type mysql struct {
    dbo sql.DB
}*/
func main() {
    start := time.Now()
    db,e := sql.Open("mysql","root:root@/test?charset=utf8")
    err(e)
    //
    // empty your database before insert
    //
    //
    // uncomment below methods for insert, select, update for each cycle
    //
    //
    // send no of rows
    //
    //u := insert(db,1000000)
    //u := update(db,"test")
    //u := del(db)
    //log.Printf("\t%d\t%s\n",u,time.Since(start))
    o := find(db)
    log.Printf("\t%d\t%s\n",o,time.Since(start))
}
func insert(db *sql.DB,n int) int64{
    s,e := db.Prepare("insert userinfo set username=?,departname=?,created=?")
    err(e)
    var u int64
    for i:=0;i<n; i++ {
        r, e := s.Exec("reoxey", "Web", time.Now())
        err(e)
        i,e := r.LastInsertId()
        err(e)
        u = i
    }
    return u
}
func update(db *sql.DB,d string) int64{
    s,e := db.Prepare("update userinfo set username=?,departname=? where uid <=1")
    err(e)
    r,e := s.Exec(d,d)
    err(e)
    u,e := r.RowsAffected()
    err(e)
    return u
}
func find(db *sql.DB)  int64{
    s,e := db.Query("select * from userinfo where 1")
    err(e)
    var u int64
    u = 0
    for s.Next(){
        var uid int
        var usn string
        var dpt string
        var time string
        s.Scan(&uid,&usn,&dpt,&time)
        fmt.Print(uid)
        fmt.Print(" ",usn)
        fmt.Print(" ",dpt)
        fmt.Println(" ",time)
        u++
    }
    return  u
}
func del(db *sql.DB)  int64{
    s,e := db.Prepare("delete from userinfo")
    err(e)
    r,e := s.Exec()
    err(e)
    u,e := r.RowsAffected()
    err(e)
    return u
}
func err(e error)  {
    if e != nil {
        panic(e)
    }
}

esempio di login:

// https://github.com/devsmt/Go-Signup-Login-Example-MySQL
package main
import "database/sql"
import _ "github.com/go-sql-driver/mysql"
import "golang.org/x/crypto/bcrypt"
import "net/http"
import "fmt"
var db *sql.DB
var err error
func signupPage(res http.ResponseWriter, req *http.Request) {
    if req.Method != "POST" {
        http.ServeFile(res, req, "signup.html")
        return
    }
    username := req.FormValue("username")
    password := req.FormValue("password")
    var user string
    err := db.QueryRow("SELECT username FROM users WHERE username=?", username).Scan(&user)
    switch {
    case err == sql.ErrNoRows:
        hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
        _, err = db.Exec("INSERT INTO users(username, password) VALUES(?, ?)", username, hashedPassword)
        if err != nil {
            panic(err.Error())
        }
        res.Write([]byte("User created!"))
        return
    case err != nil:
        panic(err.Error())
    default:
        http.Redirect(res, req, "/", 301)
    }
}
func loginPage(res http.ResponseWriter, req *http.Request) {
    if req.Method != "POST" {
        http.ServeFile(res, req, "login.html")
        return
    }
    username := req.FormValue("username")
    password := req.FormValue("password")
    var databaseUsername string
    var databasePassword string
    err := db.QueryRow("SELECT username, password FROM users WHERE username=?", username).Scan(&databaseUsername, &databasePassword)
    if err != nil {
        http.Redirect(res, req, "/login", 301)
        return
    }
    err = bcrypt.CompareHashAndPassword([]byte(pass), []byte(password))
    if err != nil {
        http.Redirect(res, req, "/login", 301)
        return
    }
    res.Write([]byte("Hello" + databaseUsername))
}
func homePage(res http.ResponseWriter, req *http.Request) {
    http.ServeFile(res, req, "index.html")
}
func main() {
    db, err = sql.Open("mysql", "root:<password>@/<dbname>")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()
    err = db.Ping()
    if err != nil {
        panic(err.Error())
    }
    http.HandleFunc("/signup", signupPage)
    http.HandleFunc("/login", loginPage)
    http.HandleFunc("/", homePage)
    http.ListenAndServe(":8080", nil)
}