Expectativas

Nessa aula vamos aprender como baixar um pacote em Go, como receber valores do usuários, e devolver valores na tela via cli, como importar tanto pacotes internos, como externos.

O termo CLI vem de Command Line Interface, você pode conhecer mais esse termo aqui.


Ponto de partida desse post:

Primeiros passos

Vamos começar criando o nosso main.go, que será o nosso arquivo de entrada.

touch main.go

Abra o main.go, e adicione o seguinte código:

package main

import (
  "fmt"
)

func main() {
  fmt.Println("Hello, world!")
}

O main.go como você já deve saber, é o arquivo principal de todo projeto em Go, ele inicia a execução do programa. Porém, como o Go é baseado em pacotes, temos que declarar o pacote main e logo depois importamos o pacote fmt para que possamos mostrar como saída no console uma mensagem.

Você pode ver seu código funcionando com:

go run main.go

Agora, com isso, nós escrevemos nosso primeiro programa, e ainda que básico, será o nossa base para nossas próximas aulas, e no fim, você irá se surpreender com como ele vai ficar.

Adicionando Barcode

Vamos desenvolver essa sessão utilizando a lib mais importante desse projeto: boombuler/barcode.

Com essa lib nós iremos criar QR codes com base em uma string provida pelo usuário.

Para começar, vamos instalar a lib com:

go get github.com/boombuler/barcode

E para você importar a lib no nosso main.go, mude o import para seguir esse modelo:

import (
  "image/png"
  "os"

  "github.com/boombuler/barcode"
  "github.com/boombuler/barcode/qr"
)

Se você estiver usando vscode, você pode clicar com Option + Click, ou Alt + Click para entender o que cada um dessas libs fazem, e como usar cada uma delas. Não é o propósito desse tutorial.

Depois de atualizar os imports, vamos para a função func main(), limpe o conteúdo dela, e vamos escrever parte por parte.

input := "Hello, world!"

qrCode, err := qr.Encode(input, qr.M, qr.Auto)

Temos um input, que é a string que queremos que o QR code seja gerado, e um err, que é um possível erro que ocorreu ao gerar o QR code. Um padrão para lidar com erros no Go é com essa estrutura simples:

if err != nil {
    panic(err)
}

Caso não tenha erro, nossa variável qrCode será gerada corretamente, porém precisamos definir uma dimensão para ela, para isso, vamos usar a função barcode.Scale que irá definir a dimensão do QR code de acordo com a string que foi passada.

qrCode, err = barcode.Scale(qrCode, 200, 200)

A linha anterior sobreescreveu os valores de qrCode com a nova dimensão, e err. Como essa função também pode causar um erro, você dever repetir o if anterior que fizemos (sim, essa estrutura será repetida muitas vezes em um código).

A partir de agora, sempre que você vir um err, parta do princípio que você deve colocar um if para tratar o erro, eu só irei comentar quando ou o tratamento for diferente de um panic, ou não precisar ter nenhum.

Beleza, com isso, vamos criar um arquivo para sarvar nosso QR code, e vamos salvar ele como qr.png:

file, err := os.Create("qrcode.png")
defer file.Close()

defer é uma palavra chave que é utilizada para que o código seja executado no final do código, ou seja, depois que o código foi executado.

Agora, é só salvar o arquivo:

png.Encode(file, qrCode)

Esse padrão que o Encode está utilizando, onde nós passamos como primeiro local/arquivo que siga uma interface io.Writer como parâmetro, e segundo argumento o que queremos escrever, é muito comum no Go, e sempre que ela se repetir eu irei comentar sobre.

Vamos ver se o código funcionou:

go run main.go

Com o fim desse código, você devve ver um arquivo qrcode.png, e se você ler o arquivo, você vai ver um QR code com a string que você passou.

Recebendo input do usuário

Bom, é bem sem graça você ter uma string estática sempre, então nós vamos receber input do usuário.

Você precisará atualizar os imports, e modificar a lina que você declarou o input para:

import (
    "fmt"
    /* ... */
)

func main() {
  var input string

  fmt.Println("Enter your string: ")
  fmt.Scanln(&input)

  /* ... */
}

Vamos ver se o código funcionou:

go run main.go

Concluindo

Bom, seu código já está funcionando, e você consegue facilmente gerar um QR code com a string que você passou. Nas próximas aulas nós vamos refatorar nosso código para que nossa main() fique mais limpa.

Adicionais

Se, você estiver usando, e é recomendado que esteja, utilizando Git, não se esqueça de atualizar o seu .gitignore, e colocar lá dentro a seguinte linha:

qrcode.png

Lista de aulas: