[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