Golang - Apostila (PT-BR)
Golang - Apostila (PT-BR)
SUMÁRIO
Introdução..............................................................3
Começando com Go........................................................4
IDE.................................................................. 4
Fundamentos.............................................................5
Biblioteca Base...................................................... 5
Execução e Build..................................................... 5
Sintaxe.............................................................. 7
1. Escopo........................................................ 7
2. Visibilidade.................................................. 7
3. Variáveis..................................................... 7
4. Tipos......................................................... 8
5. Blank identifier.............................................. 8
Ponteiros e endereçamento de memória................................ 10
Funções............................................................. 12
Retorno Múltiplo de Valores......................................... 12
Variadic Functions.................................................. 12
Funções anônimas.................................................... 13
Arrays.............................................................. 14
Slices.............................................................. 14
Maps................................................................ 15
Orientação a Objetos em Golang.........................................17
Structs............................................................. 17
1. Básico sobre Struct.......................................... 17
2. Funções em uma Struct........................................ 18
3. Herança...................................................... 18
4. Serialização em JSON......................................... 19
5. Tags......................................................... 19
6. Bind de Json para Struct..................................... 20
7. Interfaces................................................... 20
Sites de Apoio e Bibliografia..........................................22
Introdução
O objetivo do material em questão é apresentar um overview sobre Golang.
Não são necessários conhecimentos em programação para compreender os
conceitos e a ideia, mas caso possua algum, fica mais fácil o
aprofundamento no tema.
Espero que esse livro possa colaborar com seu desenvolvimento de alguma
forma, seja com conhecimento ou com um passo-a-passo que melhore sua
venda e seus negócios. Caso isso aconteça, já estou de antemão muito
feliz por isso.
Começando com Go
Links úteis:
IDE
Biblioteca Base
Execução e Build
Para que você possa executar um programa desenvolvido em go, basta ter o
runtime do Go instalado e executar os comandos:
1 go run main.go
1 go build main.go
MacOS:
1. Escopo
2. Visibilidade
1 // arquivo utils.go
2 package utils
3
4 func Exemplo() {
5 ...
6 }
7
8 // arquivo main.go
9 package main
10
11 import "utils"
12
13 func main() {
14 utils.Exemplo()
15 }
Como Exemplo() está com letra maiúscula, ela pode ser executada.
3. Variáveis
1 var b int
2 b = 18
3 var c, d string = "Hello", "World"
Dentro do escopo da função, é possível declarar e atribuir o valor de uma
só vez utilizando := na atribuição. Exemplo:
1 func main() {
2 nome := “Diogo”
3 }
4. Tipos
1 a := 8
2 b := "Olá!"
3 c := 7.77
4 d := true
5 e := 'D'
6 f := `... o amor, é assim, é a paz
7 de Deus que nunca acaba…
8 “Lugar ao Sol - Ao Vivo|Acústico - Raimundos” `
9
10 // Imprime valores
11 fmt.Printf("%v \n",a)
12 fmt.Printf("%v \n",b)
13 fmt.Printf("%v \n",c)
14 fmt.Printf("%v \n",d)
15 fmt.Printf("%v \n",e)
16 fmt.Printf("%v \n",f)
17
18 // Imprime tipos
19
20 fmt.Printf("%T \n",a) // int
21 fmt.Printf("%T \n",b) // string
22 fmt.Printf("%T \n",c) // float64
23 fmt.Printf("%T \n",d) // bool
24 fmt.Printf("%T \n",e) // int32
25 fmt.Printf("%T \n",f) // string
5. Blank identifier
A Golang não permite que uma variável seja declarada e não utilizada.
Porém, por exemplo, em alguns momentos precisamos retornar valores na
chamada de uma função. Ex:
1 if err != nil {
2 // tratativa
3 }
1 response, _ = http.Get(“http://...”)
- Constantes
Uma constante basicamente é uma “variável” que não pode ter seu valor
alterado. Em go, você precisa declarar uma constante utilizando apenas o
“=” e não “:=”. A constante pode ser definida de forma global em seu
pacote ou mesmo de forma local em uma função. Ex:
1 package main
2
3 import "fmt"
4
5 func main() {
6 x := 2
7 fmt.Println(&x)// 0xc000122058
8 }
1 y := &x
2 fmt.Println(y)// 0xc000122058
1 fmt.Println(*y)// 2
1 *y = 5
2 fmt.Println(x) // 5
O valor de b foi alterado pelo fato de ele ter sido passado por parâmetro
na função.
Funções
Variadic Functions
1 variadicFunc(1,2,3,4,456,57,3,2)
2 variadicFunc(1,2,3)
Funções anônimas
1 a := anonFunc() {
2 x += 1
3 }
Analogamente, podemos utilizar uma função dentro de outra função. Ex:
Arrays
1 var x [10]int
2 x[0] = 1
3 x[1] = 38
4 // ou então
5 x := [5]int{1,2,4,8,16}
Slices
Slices são parecidas com arrays, porém não tem tamanho fixo e são
dinâmicas. Ex:
1 // criar um sline
2 slice := make([]int)
1 sliceStr := []string {
2 “Primeiro”,
3 “Segundo”
4 }
5 fmt.Println(sliceStr[0]) // "Primeiro"
Um grande recurso que slices disponibilizam na Golang é a possibilidade
da navegação pelos índices.
Exemplo:
1 sliceString := []string {
2 "Diogo",
3 "Antonio",
4 "Sperandio",
5 "Xavier"
6 }
7 fmt.Println(sliceString[:2]) // "Diogo Antonio"
8 fmt.Println(sliceString[1:2]) // "Antonio" - A partir do índice
9 um até a segunda posição.
10 fmt.Println(sliceString[2:4]) // "Sperandio Xavier" - A partir do
11 índice 2 até a quarta posição.
12 fmt.Println(sliceString[2:]) // "Sperandio Xavier" - A partir do
13 índice 2 até ao final.
Maps
1 m := make(map[string]int)
2 m["a"] = 14
3 m["b"] = 29
1 delete(m, “b”)
Nesse ponto o valor foi apagado, porém se chamarmos o mapa no índice “b”,
o valor será igual a zero, uma vez que o map é de inteiros. Para
verificar se um valor existe dentro de um map, basta utilizá-lo
normalmente, porém, adicione mais uma variável na chamada.
1 _, exists := m["b"]
2 fmt.Println(exists) // false
Structs
Para que possamos realizar ações em uma struct, é necessário que possamos
atachar funções a elas.
3. Herança
1 fmt.Println(car.Esportivo)
2 // ou
3 fmt.Println(car.CarroEsportivo.Esportivo)
4. Serialização em JSON
A Golang possui recursos nativos em sua biblioteca padrão para nos ajudar
a serializar dados em diversos formatos, incluindo json. Ex:
5. Tags
7. Interfaces