[twitter] @womenwhogocwb
[meetup.com] Women Who Go CWB
[telegram] bit.ly/wwgtelegram
[e-mail] cwb@womenwhogo.org
[WWG Codelab #01]
Nível: Go para iniciantes (básico do zero)
Programa:
- Tipos
- Funções built-in mais comuns
- Fluxo de controle (if, for, switch)
- Funções e métodos
- Interfaces e polimorfismo
#WWGCWB
Codelab#01
calendário
20/07/19, 15:00 às 18:00 @ ateliware
03/08/19, 15:00 às 18:30 @ CINQ Technologies
17/08/19, 15:00 às 18:30 @ Rentcars.com
31/08/19, 15:00 às 18:30 @ HeroSpark
14/09/19, 15:00 às 17:00 @ Jazz Café
27 e 28/09/19 - GopherCon em Floripa
05/10/19, 15:00 às 18:30 @ Contabilizei
#WWGCWB
Codelab#01
agenda 20/07
aspectos da linguagem site + playground declarando variáveis keywords + operators
funções mais comuns tipos primitivos: int e float
#WWGCWB
Codelab#01
agenda 03/08
demais tipos primitivos:
bool e string
fluxo de controle:
if
#WWGCWB
Codelab#01
agenda 17/08
switch, for, for range funções
#WWGCWB
Codelab#01
agenda 31/08
tipos de dados compostos: slice e array git + github (com Keidi Nienkotter e Amanda Barboza)
#WWGCWB
Codelab#01
agenda 14/09
Codelab Café:
dúvidas e exercícios
#WWGCWB
Codelab#01
agenda 05/10
tipos de dados compostos: map e struct
golang Q
versão 1.0: mar/2012
tipagem estática
operador curto de declaração
#WWGCWB
Codelab#01
golang.org
Documents ► A Tour of Go ► Language Specification
► Packages
► Effective Go
► Play[ground]
#WWGCWB
Codelab#01
playground
#WWGCWB
Codelab#01
hands-on
fmt.Println("olar")
código:
#WWGCWB
Codelab#01
variáveis
#WWGCWB
Codelab#01
declarar variáveis
1) var x int
x = 100
#WWGCWB
Codelab#01
hands-on
Declarar uma variável chamada ano, do tipo int.
Em outra linha, fazer a variável ano receber o valor do ano atual usando = .
Printar o valor com fmt.Println().
Bônus: atribuir outro valor a
ano e printar novamente.
enunciado:
#WWGCWB
Codelab#01
outras formas de declarar e atribuir valor a variáveis
#WWGCWB
Codelab#01
outras formas
2) var x int = 100
#WWGCWB
Codelab#01
outras formas
3) var x = 100 💡 tipo é inferido
#WWGCWB
Codelab#01
outras formas
4) x := 100
💡 tipo é inferido
#WWGCWB
Codelab#01
hands-on declarar
Declarar, atribuir valor e printar na tela as variáveis a e b do tipo int utilizando 2 métodos diferentes
Exemplos:
- declaração com var + atribuição
- declaração com var e atribuição posterior
- usando a marmota :=
enunciado:
#WWGCWB
Codelab#01
operador curto
de declaração
#WWGCWB
Codelab#01
operador curto de declaração :=
#WWGCWB
Codelab#01
marmota :=
#WWGCWB
Codelab#01
marmota :=
#WWGCWB
Codelab#01
marmota :=
#WWGCWB
Codelab#01
marmota :=
Identificador := Valor
#WWGCWB
Codelab#01
marmota :=
declara e atribui valor à variável
deve ser usado para declarar pelo menos uma variável
#WWGCWB
Codelab#01
só funciona dentro de codeblocks
💡 as variáveis só estão disponíveis dentro do seu bloco e após sua declaração
marmota :=
#WWGCWB
Codelab#01
marmota :=
tem tipagem automática: infere o tipo da variável
#WWGCWB
Codelab#01
hands-on :=
Declare e atribua valores inteiros às variáveis x e y utilizando :=
Demonstre os valores com fmt.Println().
Depois atribua novos valores a x e y e printe novamente.
Bônus: demonstre em outra linha o valor da soma de x e y.
enunciado:
#WWGCWB
Codelab#01
pacote "fmt"
#WWGCWB
Codelab#01
Prints
fmt.Println - adiciona uma quebra de linha ao final fmt.Printf - usa especificadores de formato ("verbos") para formatar o(s) valor(es)
#WWGCWB
Codelab#01
1ºs verbos
%v - valor em formato padrão
%T - representação do Tipo
#WWGCWB
Codelab#01
hands-on Printf
Declarar uma variável ano e atribuir como valor o ano atual.
Demonstrar usando fmt.Printf() o valor e o tipo dessa variável.
Não apagar resposta!
enunciado:
#WWGCWB
Codelab#01
verbos úteis
%b - valor em base 2
%d - valor em base 10
%X - valor em base 16 (maiúsculo)
#WWGCWB
Codelab#01
hands-on verbos
Utilizando a resposta do exercício anterior, demonstrar o valor da variável ano em:
- base 2
- base 10
- base 16.
enunciado:
#WWGCWB
Codelab#01
como pular linha
se a função não pula linhas por default, precisamos indicar a quebra de linha. como fazer? usar \n extra: usar \t para dar um "tab"
#WWGCWB
Codelab#01
hands-on Printf t
Declarar uma variável x usando var x int e atribuir o valor 10 a ela
Demonstrar o valor e o tipo de x
usando fmt.Printf(), com um tab entre o valor e o tipo.
Não apagar a resolução!
enunciado:
#WWGCWB
Codelab#01
hands-on salada
Utilizar a resposta anterior. Declarar uma nova variável y e atribuir o valor 10 usando := . Demonstrar usando fmt.Printf() o valor e o tipo das duas variáveis, com um tab entre o valor e o tipo e uma linha pra cada variável
enunciado:
#WWGCWB
Codelab#01
share
#WWGCWB
Codelab#01
tipos
int
float
string
bool
array
slice
map
struct ...
tipos de dados primitivos
tipos de dados compostos
#WWGCWB
Codelab#01
tipos numéricos
int - inteiros
float - racionais
#WWGCWB
Codelab#01
int
inteiros / integers há várias representações, mas usaremos inicialmente o conceito de "int"
#WWGCWB
Codelab#01
hands-on int
Declare e atribua valores inteiros a duas variáveis: x e y Printe os resultados das seguintes operações entre as duas variáveis: soma, subtração, multiplicação e divisão.
enunciado:
#WWGCWB
Codelab#01
uint8
u de unsigned = sem sinal (absoluto)
int = inteiros
8 = ocupa 8 bits (8 posições 0 ou 1)
ou seja, um byte
comporta números inteiros de 0 a 255
0 0 0 0 0 0 0 0 = 0
até
1 1 1 1 1 1 1 1 = 255
#WWGCWB
Codelab#01
hands-on uint8
Declarar uma variável uint8 com valor entre 0 e 255. Printar a variável em base 2.
enunciado:
#WWGCWB
Codelab#01
overflow
se você declara a variável com um tipo e atribui um valor maior do que o tipo comporta, ocorre um erro de overflow.
#WWGCWB
Codelab#01
hands-on overflow
var x uint8 = 1000 dá erro de overflow.
Encontrar um tipo que permita que a variável receba o valor indicado.
Escrever a expressão completa e printar.
enunciado:
#WWGCWB
Codelab#01
overflow
#WWGCWB
Codelab#01
float
números racionais - podem ser fracionários float32 - de 32-bits float64 - de 64-bits
#WWGCWB
Codelab#01
hands-on float
Declarar 3 variáveis e atribuir diferentes valores float64 a elas. Exibir seus valores usando fmt.Println(), um em cada linha. Em outra linha, exibir o valor da soma das 3.
enunciado:
#WWGCWB
Codelab#01
hands-on float 2
Declarar 1 variável int e 1 variável float64. Atribuir valores compatíveis a elas. Exibir a soma das duas variáveis usando fmt.Println(). Em outra linha, exibir o tipo de cada uma usando fmt.Printf().
enunciado:
#WWGCWB
Codelab#01
WAZUUUUP
bônus: encoding
vídeo com explicação sobre UTF-8 (em inglês):
https://youtu.be/MijmeoH9LT4
#WWGCWB
Codelab#01
strings
interpreted strings:
► aspas duplas " " raw strings:
► acento grave ` `
#WWGCWB
Codelab#01
hands-on strings
Declarar uma variável x e atribuir um valor literal a ela (" "). Declarar uma variável y e atribuir um valor raw a ela (` `). Printar x e y.
enunciado:
#WWGCWB
Codelab#01
hands-on resumo
Parte 1) Declarar usando := as seguintes variáveis:
mensagem
nome
idade
fruta
Atribuir valores a elas e printar usando fmt.Println()
enunciado:
#WWGCWB
Codelab#01
hands-on resumo
Parte 2) Printar o texto abaixo utilizando fmt.Printf():
"%v! Meu nome é %v, tenho %v anos e minha fruta preferida é %v", mensagem, nome, idade, fruta
enunciado:
#WWGCWB
Codelab#01
hands-on resumo
Juntar todas as soluções.
enunciado:
#WWGCWB
Codelab#01
booleans
apenas dois valores possíveis: true ou false operadores relacionais geram bools Ex: 10 > 4
#WWGCWB
Codelab#01
hands-on bool
Declarar 5 variáveis diferentes e atribuir operações relacionais a elas.
Usando uma linha por variável, demonstrar o valor e o tipo de cada uma delas.
enunciado:
#WWGCWB
Codelab#01
valor zero
"valor default"
- é o valor apresentado por uma variável após sua declaração mas antes de ocorrer atribuição
- depende do tipo
#WWGCWB
Codelab#01
hands-on valor zero
Descobrir o valor zero dos seguintes tipos:
1) string
2) float64
3) bool
enunciado:
#WWGCWB
Codelab#01
fluxo de controle
#WWGCWB
Codelab#01
if
literalmente significa "se"
permite indicar condições
#WWGCWB
Codelab#01
hands-on if
Parte 1) Declarar uma variável idade e atribuir um valor int a ela. Usando if, sinalizar caso uma pessoa com essa idade seja maior de idade.
enunciado:
#WWGCWB
Codelab#01
hands-on if
Parte 2) Usando a resolução anterior, sinalizar também caso uma pessoa com esta idade seja menor de idade.
enunciado:
#WWGCWB
Codelab#01
hands-on if 2
Declarar uma variável chamada hora e atribuir um valor int a ela. Usando if e else if Printar na tela se a hora corresponde ao período da manhã, tarde, noite ou madrugada. Dica: utilizar &&
enunciado:
#WWGCWB
Codelab#01
hands-on if 3
Fazer um programa que demonstre se a variável declarada int é um número par ou ímpar, utilizando "if".
enunciado:
#WWGCWB
Codelab#01
switch
é uma forma mais elegante e organizada de indicar condicionais
permite elencar várias condições (cases) e se alguma delas for verdadeira o código adjacente é executado
#WWGCWB
Codelab#01
switch
avalia de cima para baixo e executa o primeiro case que retornar "true"
#WWGCWB
Codelab#01
switch
estrutura:
switch{
case 1:
instrução1
case 2:
instrução2
}
#WWGCWB
Codelab#01
switch ainda
keywords associadas:
- case
- default
- fallthrough
#WWGCWB
Codelab#01
hands-on switch 1
enunciado:
#WWGCWB
Codelab#01
Declarar uma variável chamada hora e atribuir um valor int a ela. Usando switch elencar cases e Printar na tela se a hora corresponde ao período da manhã, tarde, noite ou madrugada. Dica: utilizar &&
hands-on switch 2
Declare uma variável que recebe o nome de um esporte. Utilizando switch atrelado a essa variável, descreva cases e para cada um deles Printe um comentário sobre os possíveis esportes.
enunciado:
#WWGCWB
Codelab#01
for
- única construção de loops em Go - não existe "while" - voltas para checar se a condição para parar já está satisfeita ou não: iterações
#WWGCWB
Codelab#01
for
estrutura básica: 1) início 2) condição de continuação 3) regra de incremento
#WWGCWB
Codelab#01
for
- "estrutura de while"
- nesting loops
- keywords:
* break (para quebrar o loop na ausência de condições)
* continue (retorno ao início)
#WWGCWB
Codelab#01
hands-on for 1
enunciado:
#WWGCWB
Codelab#01
Utilizando a estrutura for, Printe na tela os números inteiros de 13 a 27 (inclusive).
hands-on for 2
enunciado:
#WWGCWB
Codelab#01
Utilizando a estrutura for, Printe na tela todas as horas do dia (usando o formato de 24 horas).
hands-on for 3
enunciado:
#WWGCWB
Codelab#01
Utilizando a resolução anterior, demonstre também todos os minutos de um dia (formato 24h).
Obs: nesting loops
for range
"range" permite gerenciar o loop estrutura: for i, v := range x - o 1º termo trará o índice de cada elemento - o 2º termo trará o valor de cada elemento
#WWGCWB
Codelab#01
hands-on for range
enunciado:
#WWGCWB
Codelab#01
Declare uma variável e atribua a ela o seu nome completo. Utilizando a estrutura for range, Printe na tela o índice e o valor de cada caractere.
funções
#WWGCWB
Codelab#01
funções
são blocos de código reaproveitáveis
dada uma entrada, a saída será sempre a mesma
#WWGCWB
Codelab#01
hands-on funções
enunciado:
#WWGCWB
Codelab#01
Escreva um programa que contenha uma função sem parâmetros que Printe na tela uma saudação sempre que for chamada.
hands-on funções 2
enunciado:
#WWGCWB
Codelab#01
Usando a solução anterior, faça sua função também Printar um nome de acordo com o valor da variável "nome".
hands-on funções 3
enunciado:
#WWGCWB
Codelab#01
Ainda usando a solução anterior, faça sua função verificar a hora do dia (receber como parâmetro um int) e Printar na tela a saudação mais adequada ao horário.
hands-on funções 4
enunciado:
#WWGCWB
Codelab#01
Escreva um programa que contenha uma função que multiplique dois operandos e que Printe o resultado na tela.
hands-on funções 5
enunciado:
#WWGCWB
Codelab#01
Escreva um programa que contenha uma função que multiplique dois operandos e que retorne o seu produto. Printe o retorno na func main.
hands-on funções 6
enunciado:
#WWGCWB
Codelab#01
Escreva um programa que contenha uma função que multiplique TRÊS operandos e que retorne o seu produto. Printe o retorno na func main.
hands-on funções 7
enunciado:
#WWGCWB
Codelab#01
Escreva um programa que contenha uma função que multiplique "N" operandos e que retorne o seu produto. Printe o retorno na func main.
tipos de dados compostos
#WWGCWB
Codelab#01
tipos compostos
► Array ► Slice ► Map ► Struct
#WWGCWB
Codelab#01
array
- é uma sequência enumerada de elementos do mesmo tipo.
- os índices começam em 0 (zero-based index).
- o tipo do array tá associado ao seu comprimento.
#WWGCWB
Codelab#01
array
- a quantidade de elementos é chamada de comprimento
- o comprimento pode ser verificado usando len(x)
#WWGCWB
Codelab#01
array
- quando uma array é usada (por exemplo, passada pra uma função), é gerada uma cópia, o que consome memória.
#WWGCWB
Codelab#01
hands-on array
enunciado:
#WWGCWB
Codelab#01
Escreva um programa que contenha uma array de strings. O valor dos elementos deve corresponder ao nome por escrito do número do índice. Printe na tela todos os elementos acompanhados dos seus índices.
slice
- também permite agrupamento de valores do mesmo tipo
- porém, diferentemente do array, seu comprimento pode ser alterado ao longo do uso
#WWGCWB
Codelab#01
slice
- append: permite adicionar itens a um slice
- make: permite criar slice com um conjunto de orientações, não apenas declarando literalmente os itens
#WWGCWB
Codelab#01
hands-on slice 1
enunciado:
#WWGCWB
Codelab#01
Utilize um slice de string pra criar uma lista de compras de mercado. Printe cada um dos itens em uma linha. Bônus: demonstre cada item enumerado.
slice
- é possível fatiar slices de um elemento a outro:
slice[a:b]
- a fatia vai do elemento de índice a até logo antes do elemento de índice b.
#WWGCWB
Codelab#01
hands-on slice 2
enunciado:
#WWGCWB
Codelab#01
1) Declare duas slices de int e preencha 10 posições de cada.
2) Some ambas as slices numa 3ª slice.
3) Fatie a nova slice deixando apenas os itens das posições 5 a 12.
4) Printe todas as etapas.
map
- estrutura chave + valor (dicionário)
- associa valores de um tipo (chave ou key) a valores de um outro tipo (valor/elemento ou value)
#WWGCWB
Codelab#01
map
- a chave pode ser de vários tipos
- para chamar um elemento específico, usar x[key]
#WWGCWB
Codelab#01
map
- se você chamar uma chave que não tem valor atribuído no map ela retornará o valor zero do tipo dos valores daquele map - pra evitar isso, fazer teste comma ok (retorna true/false)
#WWGCWB
Codelab#01
map
- é possível deletar um elemento usando a função chamada delete:
delete(map, key)
#WWGCWB
Codelab#01
hands-on map 1
enunciado:
#WWGCWB
Codelab#01
1) Declare um map do tipo map[string]string que relacione números de apartamentos e placas de carros estacionados na garagem. 2) Printe de forma organizada. 3) Considerando que um dos moradores se mudou, delete o valor da placa dele do map.
hands-on map 2
enunciado:
#WWGCWB
Codelab#01
1) Declare um map do tipo map[string]int que relacione algarismos romanos a números inteiros (até X/10). 2) Printe de forma organizada. 3) Demonstre a soma de diferentes algarismos romanos.
struct
- é uma estrutura de dados que permite compôr valores de tipos diferentes
- é um agregador
#WWGCWB
Codelab#01
struct
- é uma estrutura de dados que permite compôr valores de tipos diferentes
- é um agregador
#WWGCWB
Codelab#01
struct
- declarando o tipo:
type x struct{
a tipo
b tipo
c tipo
}
#WWGCWB
Codelab#01
struct
- declarando uma variável do tipo:
variável := x{
a: m,
b: n,
c: o,
}
#WWGCWB
Codelab#01
hands-on struct 1
enunciado:
#WWGCWB
Codelab#01
1) Crie uma struct pra representar os dados de um apartamento com os campos:
- número int
- vaga de garagem string
- nome da proprietária string
2) Printe pelo menos 3 variáveis desse tipo que você criou.
hands-on struct 2
enunciado:
#WWGCWB
Codelab#01
1) Crie uma struct com os campos que preferir para representar os personagens da sua série / filme / livro preferido.
2) Declare pelo menos 3 variáveis diferentes desse tipo (3 personagens).
3) Printe usando for range.
WAZUUUUP
#WWGCWB
Codelab#01
calendário
20/07/19, 15:00 às 18:00 @ ateliware
03/08/19, 15:00 às 18:30 @ CINQ Technologies
17/08/19, 15:00 às 18:30 @ Rentcars.com
31/08/19, 15:00 às 18:30 @ HeroSpark
14/09/19, 15:00 às 17:00 @ Jazz Café
27 e 28/09/19 - GopherCon em Floripa
05/10/19, 15:00 às 18:30 @ Contabilizei
@womenwhogocwb
Women Who Go CWB
bit.ly/wwgtelegram | t.me/wwgcwb
cwb@womenwhogo.org
Women Who Go CWB
CODELAB #01
#WWGCWB
@erikones_
@erikones
erika.carvalho@protonmail.com
Women Who Go CWB
CODELAB #01
#WWGCWB
WWG Codelab #01
By erikacarvalho
WWG Codelab #01
slides do codelab golang iniciante #01 organizado por Women Who Go CWB (twitter.com/womenwhogocwb)
- 127