Skip to content

Instantly share code, notes, and snippets.

@simonklee
Created November 10, 2013 11:58
Show Gist options
  • Save simonklee/7397355 to your computer and use it in GitHub Desktop.
Save simonklee/7397355 to your computer and use it in GitHub Desktop.
go build -race
package main
import (
"os"
"database/sql"
"fmt"
"sync"
_ "github.com/go-sql-driver/mysql"
)
var createQ = `
CREATE TABLE Test(
TestID INT(11) NOT NULL AUTO_INCREMENT,
Name VARCHAR(255) NULL DEFAULT '',
PRIMARY KEY (TestID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci`
var dropQ = `DROP TABLE IF EXISTS Test`
func main() {
dsn := "testing:testing@tcp(localhost:3306)/testing?charset=utf8&parseTime=True"
db, _ := sql.Open("mysql", dsn)
defer db.Close()
if _, err := db.Exec(dropQ); err != nil {
fmt.Println(err)
os.Exit(1)
}
if _, err := db.Exec(createQ); err != nil {
fmt.Println(err)
os.Exit(1)
}
if _, err := db.Exec("INSERT INTO Test(Name) VALUES('Foo')"); err != nil {
fmt.Println(err)
os.Exit(1)
}
wg := &sync.WaitGroup{}
selectCount := func(v *int) {
row := db.QueryRow("SELECT COUNT(*) FROM Test")
if err := row.Scan(v); err != nil {
fmt.Println(err)
os.Exit(1)
}
wg.Done()
}
var count1 int
var count2 int
wg.Add(2)
go selectCount(&count1)
go selectCount(&count2)
wg.Wait()
fmt.Println(count1)
fmt.Println(count2)
}
package main
import (
"os"
"database/sql"
"fmt"
"sync"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var createQ = `
CREATE TABLE Test(
TestID INT(11) NOT NULL AUTO_INCREMENT,
Name VARCHAR(255) NULL DEFAULT '',
PRIMARY KEY (TestID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci`
var dropQ = `DROP TABLE IF EXISTS Test`
func main() {
dsn := "testing:testing@tcp(localhost:3306)/testing?charset=utf8&parseTime=True"
db, _ := sql.Open("mysql", dsn)
sqlxDb := sqlx.NewDb(db, "mysql")
defer db.Close()
if _, err := sqlxDb.Exec(dropQ); err != nil {
fmt.Println(err)
os.Exit(1)
}
if _, err := sqlxDb.Exec(createQ); err != nil {
fmt.Println(err)
os.Exit(1)
}
if _, err := sqlxDb.Exec("INSERT INTO Test(Name) VALUES('Foo')"); err != nil {
fmt.Println(err)
os.Exit(1)
}
wg := &sync.WaitGroup{}
selectCount := func(v *int) {
row := db.QueryRowx("SELECT COUNT(*) FROM Test")
if err := row.Scan(v); err != nil {
fmt.Println(err)
os.Exit(1)
}
wg.Done()
}
var count1 int
var count2 int
wg.Add(2)
go selectCount(&count1)
go selectCount(&count2)
wg.Wait()
fmt.Println(count1)
fmt.Println(count2)
}
package main
import (
"os"
"database/sql"
"fmt"
"sync"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var createQ = `
CREATE TABLE Test(
TestID INT(11) NOT NULL AUTO_INCREMENT,
Name VARCHAR(255) NULL DEFAULT '',
PRIMARY KEY (TestID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci`
var dropQ = `DROP TABLE IF EXISTS Test`
func main() {
dsn := "testing:testing@tcp(localhost:3306)/testing?charset=utf8&parseTime=True"
db, _ := sql.Open("mysql", dsn)
sqlxDb := sqlx.NewDb(db, "mysql")
defer db.Close()
if _, err := sqlxDb.Exec(dropQ); err != nil {
fmt.Println(err)
os.Exit(1)
}
if _, err := sqlxDb.Exec(createQ); err != nil {
fmt.Println(err)
os.Exit(1)
}
if _, err := sqlxDb.Exec("INSERT INTO Test(Name) VALUES('Foo')"); err != nil {
fmt.Println(err)
os.Exit(1)
}
wg := &sync.WaitGroup{}
selectCount := func(v *int) {
row := db.QueryRow("SELECT COUNT(*) FROM Test")
if err := row.Scan(v); err != nil {
fmt.Println(err)
os.Exit(1)
}
wg.Done()
}
var count1 int
var count2 int
wg.Add(2)
go selectCount(&count1)
go selectCount(&count2)
wg.Wait()
fmt.Println(count1)
fmt.Println(count2)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment