Início Rápido: Usar a linguagem Go para se conectar e consultar dados no Banco de Dados do Azure para MySQL
APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor flexível
Este guia de início rápido mostra como se conectar a um Banco de Dados do Azure para MySQL usando código escrito na linguagem Go em plataformas Windows, Ubuntu Linux e Apple macOS. Ele mostra como usar instruções SQL para consultar, inserir, atualizar e excluir dados no banco de dados. Este tópico pressupõe que você está familiarizado com o desenvolvimento usando Go e começou recentemente a trabalhar com o Banco de Dados do Azure para MySQL.
Pré-requisitos
Este guia de início rápido usa os recursos criados em um destes guias como ponto de partida:
- Criar uma instância de servidor flexível do Banco de Dados do Azure para MySQL usando o portal do Azure
- Criar uma instância de servidor flexível do Banco de Dados do Azure para MySQL usando a CLI do Azure
Importante
Recomendamos que você use um servidor com Acesso público (endereços IP permitidos) habilitado para este início rápido. Usar um servidor com acesso privado (integração VNet) habilitado para concluir este início rápido pode envolver etapas extras que não são abordadas.
Verifique se o endereço IP do qual você está se conectando foi adicionado às regras de firewall do servidor usando o portal do Azure ou a CLI do Azure
Instalar o conector MySQL e Go
Instale o Go e o go-sql-driver para MySQL em seu próprio computador. Dependendo da sua plataforma, siga as etapas na seção apropriada:
Baixe e instale o Go para Microsoft Windows de acordo com as instruções de instalação.
Inicie o prompt de comando no menu Iniciar.
Crie uma pasta para o seu projeto, como
mkdir %USERPROFILE%\go\src\mysqlgo
.Altere o diretório na pasta do projeto, como
cd %USERPROFILE%\go\src\mysqlgo
.Defina a variável de ambiente para GOPATH apontar para o diretório de código-fonte:
set GOPATH=%USERPROFILE%\go
Execute o comando go mod init para criar um módulo no diretório atual. Por exemplo:
go mod init mysqlgo
.- O parâmetro
<module_path>
geralmente é um local em um repositório do GitHub, tal comogithub.com/<your_github_account_name>/<directory>
. - Quando você está criando um aplicativo de linha de comando como teste e não vai publicar o aplicativo, o
<module_path>
não precisa se referir a um local real. Por exemplo,mysqlgo
.
- O parâmetro
Instale o go-sql-driver para mysql executando o comando
go get github.com/go-sql-driver/mysql
.Em resumo, instale o Go e execute esses comandos no prompt de comando:
mkdir %USERPROFILE%\go\src\mysqlgo cd %USERPROFILE%\go\src\mysqlgo set GOPATH=%USERPROFILE%\go go mod init mysqlgo go get github.com/go-sql-driver/mysql
Obter informações de conexão
Obtenha as informações de conexão necessárias para se conectar ao Banco de Dados do Azure para MySQL. Você precisa das credenciais de logon e do nome do servidor totalmente qualificado.
- Faça logon no Portal do Azure.
- No menu à esquerda no portal do Azure, clique em Todos os recursos e pesquise o servidor que você criou (como mydemoserver).
- Clique no nome do servidor.
- No painel Visão Geral do servidor, anote o Nome do servidor e Nome de logon do administrador do servidor. Se você esquecer sua senha, também poderá redefini-la nesse painel.
Compilar e executar o código Go
- Para escrever código Golang, você pode usar um editor de texto simples, como o Bloco de Notas no Microsoft Windows, vi ou Nano no Ubuntu ou Editor de Texto no macOS. Se você preferir IDE (Ambiente de Desenvolvimento Integrado) mais avançado, experimente o Gogland da Jetbrains, o Visual Studio Code da Microsoft ou o Atom.
- Cole o código Go das seções abaixo em arquivos de texto e salve-os em sua pasta de projeto com a extensão de arquivo *.go (como caminho do Windows
%USERPROFILE%\go\src\mysqlgo\createtable.go
ou caminho do Linux~/go/src/mysqlgo/createtable.go
). - Localize as constantes
host
,database
,user
epassword
no código e substitua os valores de exemplo com seus próprios valores. Um banco de dados padrão chamado flexibleserverdb é criado ao criar a instância do servidor do Banco de Dados do Azure para MySQL. Você pode usar esse banco de dados ou outro que você criou. - Inicie o prompt de comando ou shell Bash. Altere o diretório na pasta do seu projeto. Por exemplo, no Windows
cd %USERPROFILE%\go\src\mysqlgo\
. No Linuxcd ~/go/src/mysqlgo/
. Alguns dos editores IDE mencionados oferecem recursos de depuração e runtime sem a necessidade de comandos do shell. - Execute o código, digitando o comando
go run createtable.go
para compilar o aplicativo e executá-lo. - Como alternativa, para compilar o código em um aplicativo nativo,
go build createtable.go
, iniciecreatetable.exe
para executar o aplicativo.
Conectar-se, criar tabela e inserir dados
Use o código a seguir para se conectar ao servidor, criar uma tabela e carregar os dados usando uma instrução SQL INSERT.
O código importa três pacotes: o pacote sql, o go sql driver para mysql como driver para se comunicar com o Banco de Dados do Azure para MySQL e o pacote fmt para impressão de entrada e saída na linha de comando.
O código chama o método sql.Open() para se conectar ao Banco de Dados do Azure para MySQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. O código chama o método Exec() várias vezes para executar vários comandos DDL. O código também usa o Prepare() e Exec() para executar instruções preparadas com parâmetros diferentes para inserir três linhas. A cada ocorrência, um método personalizado checkError() é usado para verificar se ocorreu um erro e pane.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
password = "yourpassword"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=true", user, password, host, database)
// Initialize connection object.
db, err := sql.Open("mysql", connectionString)
checkError(err)
defer db.Close()
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database.")
// Drop previous table of same name if one exists.
_, err = db.Exec("DROP TABLE IF EXISTS inventory;")
checkError(err)
fmt.Println("Finished dropping table (if existed).")
// Create table.
_, err = db.Exec("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
checkError(err)
fmt.Println("Finished creating table.")
// Insert some data into table.
sqlStatement, err := db.Prepare("INSERT INTO inventory (name, quantity) VALUES (?, ?);")
res, err := sqlStatement.Exec("banana", 150)
checkError(err)
rowCount, err := res.RowsAffected()
fmt.Printf("Inserted %d row(s) of data.\n", rowCount)
res, err = sqlStatement.Exec("orange", 154)
checkError(err)
rowCount, err = res.RowsAffected()
fmt.Printf("Inserted %d row(s) of data.\n", rowCount)
res, err = sqlStatement.Exec("apple", 100)
checkError(err)
rowCount, err = res.RowsAffected()
fmt.Printf("Inserted %d row(s) of data.\n", rowCount)
fmt.Println("Done.")
}
Ler dados
Use o código a seguir para conectar-se e ler os dados usando uma instrução SQL SELECT.
O código importa três pacotes: o pacote sql, o go sql driver para mysql como driver para se comunicar com o Banco de Dados do Azure para MySQL e o pacote fmt para impressão de entrada e saída na linha de comando.
O código chama o método sql.Open() para se conectar ao Banco de Dados do Azure para MySQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. O código chama o método Query() para executar o comando select. Em seguida, ele executa Next() para iterar por meio do conjunto de resultados e Scan() para analisar os valores de coluna, salvando o valor nas variáveis. A cada ocorrência, um método personalizado checkError() é usado para verificar se ocorreu um erro e pane.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
password = "yourpassword"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=true", user, password, host, database)
// Initialize connection object.
db, err := sql.Open("mysql", connectionString)
checkError(err)
defer db.Close()
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database.")
// Variables for printing column data when scanned.
var (
id int
name string
quantity int
)
// Read some data from the table.
rows, err := db.Query("SELECT id, name, quantity from inventory;")
checkError(err)
defer rows.Close()
fmt.Println("Reading data:")
for rows.Next() {
err := rows.Scan(&id, &name, &quantity)
checkError(err)
fmt.Printf("Data row = (%d, %s, %d)\n", id, name, quantity)
}
err = rows.Err()
checkError(err)
fmt.Println("Done.")
}
Atualizar dados
Use o código a seguir para conectar-se e atualizar os dados usando uma instrução SQL UPDATE.
O código importa três pacotes: o pacote sql, o go sql driver para mysql como driver para se comunicar com o Banco de Dados do Azure para MySQL e o pacote fmt para impressão de entrada e saída na linha de comando.
O código chama o método sql.Open() para se conectar ao Banco de Dados do Azure para MySQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. O código chama o método Exec() para executar o comando update. A cada ocorrência, um método personalizado checkError() é usado para verificar se ocorreu um erro e pane.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
password = "yourpassword"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=true", user, password, host, database)
// Initialize connection object.
db, err := sql.Open("mysql", connectionString)
checkError(err)
defer db.Close()
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database.")
// Modify some data in table.
rows, err := db.Exec("UPDATE inventory SET quantity = ? WHERE name = ?", 200, "banana")
checkError(err)
rowCount, err := rows.RowsAffected()
fmt.Printf("Updated %d row(s) of data.\n", rowCount)
fmt.Println("Done.")
}
Excluir dados
Use o código a seguir para conectar-se e remover os dados usando uma instrução SQL DELETE.
O código importa três pacotes: o pacote sql, o go sql driver para mysql como driver para se comunicar com o Banco de Dados do Azure para MySQL e o pacote fmt para impressão de entrada e saída na linha de comando.
O código chama o método sql.Open() para se conectar ao Banco de Dados do Azure para MySQL e verifica a conexão usando o método db.Ping(). Um identificador de banco de dados é usado em todo o processo, mantendo o pool de conexão para o servidor de banco de dados. O código chama o método Exec() para executar o comando delete. A cada ocorrência, um método personalizado checkError() é usado para verificar se ocorreu um erro e pane.
Substitua as constantes host
, database
, user
e password
pelos seus próprios valores.
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
host = "mydemoserver.mysql.database.azure.com"
database = "flexibleserverdb"
user = "myadmin"
password = "yourpassword"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=true", user, password, host, database)
// Initialize connection object.
db, err := sql.Open("mysql", connectionString)
checkError(err)
defer db.Close()
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database.")
// Modify some data in table.
rows, err := db.Exec("DELETE FROM inventory WHERE name = ?", "orange")
checkError(err)
rowCount, err := rows.RowsAffected()
fmt.Printf("Deleted %d row(s) of data.\n", rowCount)
fmt.Println("Done.")
}
Limpar os recursos
Para limpar todos os recursos usados durante este guia de início rápido, exclua o grupo de recursos usando o seguinte comando:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes