Dando continuidade a Série Go veremos: Conexão ao MySQL, existem diversos bancos de dados que Go possui drivers para estabelecer a conexão.
No entanto, nesse exemplo veremos com MySQL, pois é um dos mais populares.
Lembre-se de antes possui, lógico, o MySQL instalado no seu sistema.
mkdir myproject
cd myproject
go mod init gosql # Crie um módulo
go get -u github.com/go-sql-driver/mysql # Faça download do driver
vim main.go
main.go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
dsn := "usuario:senha@tcp(127.0.0.1:3306)/nomedobanco"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal("Não conectou:", err)
}
fmt.Println("Conexão bem-sucedida!")
}
Compilar e rodar:
go build main.go
./main
Conexão bem-sucedida!
Você pode fazer INSERT
, UPDATE
, DELETE
, SELECT
,… Mas, nesse exemplo vamos mostrar somente o SELECT
:
Vamos selecionar os campos: User
e Password
da tabela user
do banco de dados mysql
.
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
dsn := "usuario:senha@tcp(127.0.0.1:3306)/mysql"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
rows, err := db.Query("SELECT User, Password FROM user")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var user, password string
if err := rows.Scan(&user, &password); err != nil {
log.Fatal(err)
}
fmt.Printf("User: %s, Password: %s\n", user, password)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}
Exemplo de saída:
User: mariadb.sys, Password:
User: root, Password: *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5
User: mysql, Password: invalid
Até o próximo artigo da série!
database/sql
(padrão do Go)(não oficial, mas bem escrito)
sql
(pra testar, embora sem MySQL, é bom pra mockar)