Partilhar via


Guia de início rápido: use o idioma Go para conectar e consultar dados no Banco de Dados do Azure para MySQL

Este guia de introdução demonstra como se pode ligar a uma Base de Dados do Azure para MySQL a partir de plataformas Windows, Ubuntu, Linux e Apple macOS com código escrito na linguagem Go. Explica como utilizar as instruções SQL para consultar, inserir, atualizar e eliminar dados da base de dados. Este tópico pressupõe que está familiarizado com a programação com Go e que nunca trabalhou com a Base de Dados do Azure para MySQL.

Pré-requisitos

Este guia de início rápido utiliza os recursos criados em qualquer um desTes guias como ponto de partida:

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 de rede virtual) habilitado para concluir este início rápido pode envolver etapas adicionais que não são cobertas.

Verifique se o endereço IP do qual você está se conectando foi adicionado as regras de firewall do servidor usando o Gerenciar regras de firewall para o Banco de Dados do Azure para MySQL - Servidor Flexível usando o portal do Azure ou Gerenciar regras de firewall para o Banco de Dados do Azure para MySQL - Servidor Flexível usando a CLI do Azure

Instalar o Go e o conector MySQL

Instale o Go e o go-sql-driver para MySQL no computador. Dependendo da sua plataforma, siga os passos na secção apropriada:

  1. Transfira e instale o Go para o Microsoft Windows, de acordo com as instruções de instalação.

  2. Inicie a linha de comandos a partir do menu Iniciar.

  3. Crie uma pasta para o seu projeto, como mkdir %USERPROFILE%\go\src\mysqlgo.

  4. Altere o diretório para a pasta do projeto, como cd %USERPROFILE%\go\src\mysqlgo.

  5. Defina a variável de ambiente para GOPATH para apontar para o diretório do código-fonte: set GOPATH=%USERPROFILE%\go.

  6. Execute go mod init para criar um módulo no diretório atual. Por exemplo: go mod init mysqlgo.

    • O <module_path> parâmetro é geralmente um local em um repositório GitHub - como github.com/<your_github_account_name>/<directory>.
    • Quando você está criando um aplicativo de linha de comando como um teste e não publica o aplicativo, o <module_path> não precisa se referir a um local real. Por exemplo, mysqlgo.
  7. Execute o comando go get github.com/go-sql-driver/mysql para instalar o go-sql-driver para mysql.

    Para resumir, instale o Go e, em seguida, execute estes comandos na linha de comandos:

    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 da ligação

Obtenha as informações de ligação necessárias para se ligar à Base de Dados do Azure para MySQL. Necessita do nome do servidor e das credenciais de início de sessão totalmente qualificados.

  1. Inicie sessão no portal do Azure.
  2. No menu à esquerda no portal do Azure, selecione Todos os recursos e procure o servidor que você criou (como mydemoserver).
  3. Selecione o nome do servidor.
  4. No painel Descrição geral do servidor, tome nota do Nome do servidor e do Nome de início de sessão de administrador do servidor. Caso se esqueça da sua palavra-passe, também pode repor a palavra-passe neste painel.

Criar e executar código Go

  1. Para escrever o código Golang, pode utilizar um editor de textos simples, como o Blobo de Notas no Microsoft Windows, o vi ou o Nano no Ubuntu ou o TextEdit em macOS. Se preferir um Ambiente de Desenvolvimento Interativo (IDE) rico, experimente o Gogland, da Jetbrains, o Visual Studio Code, da Microsoft, ou o Atom.
  2. Cole o código Go das seções abaixo em arquivos de texto e, em seguida, salve-os na pasta do projeto com a extensão de arquivo *.go (como caminho %USERPROFILE%\go\src\mysqlgo\createtable.go do Windows ou caminho ~/go/src/mysqlgo/createtable.godo Linux ).
  3. Localize as constantes host, database, user e password no código e, em seguida, substitua os valores de exemplo pelos seus próprios valores. Um banco de dados chamado flexibleserverdb é criado quando você cria seu Banco de Dados do Azure para instância do servidor MySQL. Você pode usar esse banco de dados ou outro que você criou.
  4. Inicie a linha de comandos ou a shell de Bash. Altere o diretório para a pasta do projeto . Por exemplo, no Windows cd %USERPROFILE%\go\src\mysqlgo\. No Linux, cd ~/go/src/mysqlgo/. Alguns dos editores de IDE mencionados oferecem capacidades de depuração e runtime sem que sejam necessários comandos da shell.
  5. Execute o código com o comando go run createtable.go, para compilar a aplicação e executá-la.
  6. Em alternativa, para criar o código numa aplicação nativa, go build createtable.go, e inicie createtable.exe para executar a aplicação.

Ligar, criar tabela e inserir dados

Utilize o seguinte código para se ligar ao servidor, criar uma tabela e carregar os dados com uma instrução SQL INSERT.

O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.

O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o métodoExec() várias vezes para executar vários comandos DDL. Também utiliza Prepare() e Exec() para executar instruções preparadas com diferentes parâmetros para inserir três linhas. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método "panic", para sair.

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

Utilize o código seguinte para se ligar e ler dados com uma instrução SQL SELECT.

O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.

O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Query() para executar o comando de seleção. Em seguida, executaNext() para iterar o conjunto de resultados e Scan() para analisar os valores das colunas, guardando os valores em variáveis. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método “panic”, para sair.

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

Utilize o código seguinte para se ligar e atualizar os dados com uma instrução SQL UPDATE.

O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.

O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Exec() para executar o comando de atualização. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método “panic”, para sair.

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

Eliminar dados

Utilize o código seguinte para se ligar e remover os dados com uma instrução SQL DELETE.

O código importa três pacotes: o pacote sql, o go sql driver for mysql como um controlador para comunicar com a Base de Dados do Azure para MySQL e o pacote fmt para entrada e saída de dados impressos na linha de comandos.

O código chama o método sql.Open() para ligar à Base de Dados do Azure para MySQL e verifica a ligação através do método db.Ping(). É utilizado um identificador de base de dados ao manter o conjunto de ligações para o servidor da base de dados. O código chama o método Exec() para executar o comando de eliminação. De cada vez, é utilizado um método checkError() personalizado para verificar se ocorreu um erro e se deve ser chamado o método “panic”, para sair.

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

Clean up resources (Limpar recursos)

Para limpar todos os recursos usados durante este início rápido, exclua o grupo de recursos usando o seguinte comando:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Próximo passo