As várias formas de fazer looping em Go

A maioria das linguagens que já trabalhei tem vários comandos para fazer looping, como por exemplo for, foreach, while, do..while e goto.

Já em Go, nós só temos o comando for, porém ele tem várias assinaturas, o que no final faz com que ele possa ter o comportamento equivalente a um for, foreach e while de outras linguagens.

Vamos começar pela forma mais básica, que é a mesma assinatura que outras linguagens utilizam.

for i := 0; i < 10; i++ {
    fmt.Println(i)
}

nomes := []string{Tiago, Lucas, Pedro, Luana, Dani}
for i := 0; i < len(nomes); i++ {
    fmt.Println(nomes[i])
}
Leia mais »

O que são packages e como organiza-los

Packages ou pacotes na tradução literal, são uma forma de agrupar arquivos Go que contenham código de um mesmo escopo, como por exemplo, arquivos com structs, funções, variável e etc.. que ajudem na conexão/operações de banco de dados podem ser colocados dentro de uma pasta db ou database.

Mas e se eu não quiser usar packages? Nesse caso, você não vai conseguir programar em Go, pois todo programa ou lib Go é feito por um ou vários packages.

O nome do package, por convenção, é sempre o nome da última pasta no caminho de onde o arquivo se encontra. Por exemplo, os arquivos que estão no caminho foo/bar serão do package bar.

Caso você esteja fazendo um lib para ser usada por terceiros, por convenção o nome do package dos arquivos que estão no diretório root será o nome da sua lib. Se ficou confuso, de uma olhada na lib GoSOAP que implementei um tempo atrás.

Leia mais »

Nem private, nem public… Como trabalhar com visibilidade

Se você trabalha ou já trabalhou com alguma linguagem com suporte a orientação a objetos, você com certeza está familiarizado com os termos public, private e protected. Se você está iniciando e nunca ouviu falar, vou explicar rapidamente.

Esses termos são usados para definir a visibilidade dos métodos e atributos de uma classe, sendo que:

public – usado para que qualquer um possa utilizar o método ou atributo.

private – somente a própria classe pode utilizar.

protected – a classe e suas classes filhas podem utilizar.

Fácil não?!

Pois é, só que em Go esses termos não existem 🙂. Mas calma, o conceito de private e public (exported) existem sim, só é um pouco diferente.

Leia mais »

Qual a diferença de length e capacity

Quando trabalhamos com slices, existem duas funções essenciais que utilizamos para “medir” o tamanho (length) e a capacidade (capacity) de um slice, que são len e cap, respectivamente.

Mas afinal, qual a diferença de length e capacity?

A documentação do Go define length como sendo a quantidade de elementos em um slice, enquanto capacity é a capacidade do array para abrigar elementos.

No exemplo abaixo vamos criar 2 slices. No primeiro vamos definir somente o length, enquanto no segundo vamos definir o length e a capacity.

Leia mais »

O que são structs e como usá-las

Muitas vezes utilizar somente os tipos primitivos de uma linguagem não é o suficiente para desenvolver um programa escalável. Na maioria das linguagens mais modernas, é nesse momento que criamos uma classe com todos os atributos e métodos que precisamos.

Em Go não existe o conceito de orientação a objetos, ou seja, não existem classes, herança, polimorfismo e etc… Então como fazemos quando precisamos trabalhar com estruturas de dados mais complexas?

Fácil, nós criamos uma struct.

Struct é um tipo de coleção de campos, onde cada campo tem seu tipo de dado, podendo inclusive ser uma outra struct. Vamos ver um exemplo básico.

type Pessoa struct {
    Nome string
    Sobrenome string
    Idade int8
}
Leia mais »