sql >> Database teknologi >  >> RDS >> Mysql

Hvad er den anbefalede måde at oprette forbindelse til MySQL fra Go?

Nogle få drivere er tilgængelige, men du bør kun overveje dem, der implementerer database/sql API som

  • det giver en ren og effektiv syntaks,
  • det sikrer, at du senere kan ændre driveren uden at ændre din kode, bortset fra import og forbindelse.

To hurtige og pålidelige drivere er tilgængelige til MySQL :

Jeg har brugt dem begge i produktionen, programmer kører i flere måneder med forbindelsesnumre i millioner uden fejl.

Andre SQL-databasedrivere er angivet på go-wiki .

Importér, når du bruger MyMySQL:

import (
    "database/sql"
    _ "github.com/ziutek/mymysql/godrv"
)

Importér, når du bruger Go-MySQL-driver:

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

Tilslutning og lukning ved hjælp af MyMySQL :

con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns

Tilslutning og lukning ved hjælp af Go-MySQL-driver:

con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()

Vælg én række :

row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)

Vælg flere rækker, og byg en matrix med resultater:

rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
items := make([]*SomeStruct, 0, 10)
var ida, idb uint
for rows.Next() {
    err = rows.Scan(&ida, &idb)
    if err != nil { /* error handling */}
    items = append(items, &SomeStruct{ida, idb})
}

Indsæt:

_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)

Du vil se, at arbejdet i Go med MySQL er en dejlig oplevelse:Jeg aldrig havde et problem, mine servere kører i flere måneder uden fejl eller lækager. Det faktum, at de fleste funktioner blot tager et variabelt antal argumenter, letter en opgave, som er kedelig på mange sprog.

Bemærk, at hvis du i fremtiden skal bruge en anden MySQL-driver, skal du blot ændre to linjer i én gang-fil:linjen, der importerer, og linjen, der åbner forbindelsen.



  1. Håndtering af latency i MySQL-transaktioner

  2. MySQL og GROUP_CONCAT() maksimal længde

  3. Hvordan får jeg CakePHP bake til at finde mysql.sock og genkende MySQL, mens jeg bruger MAMP på Mac OSX?

  4. Postgres holdt lige tilfældigt op med at virke (Rails, PGSQL.5432)