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