Aulas do Curso (185 vídeos)
Go é uma linguagem de programação de código aberto que torna muito simples a criação de software simples, confiável e ef…
• Antes de investir seu tempo em aprender a linguagem Go, é bom você entender por que isso é uma boa idéia. • O que …
• Qual o motivo que algumas pessoa obtem sucesso e outras não? • Eu quero que você obtenha sucesso com este curso, e…
• Leia as descrições dos vídeos! Outline completo: https://github.com/ellenkorbes/aprendago/blob/master/OUTLINE.md …
• Velocidade de playback. • Repetição. • Erros. • Português vs. inglês — Obviamente esse é um curso em p…
- Utilize o GitHub para conversar com colegas, compartilhar dicas para soluções, e tirar dúvidas. - Estudantes mais avan…
- É online, funciona sem instalar nem configurar nada. - Assim você pode começar a programar o mais rápido possível. - M…
- Estrutura básica: - package main. - func main: é aqui que tudo começa, é aqui que tudo acaba. - import. -…
- := parece uma marmota (gopher) ou o punisher. - Uso: - Tipagem automática - Só pode repetir se houverem variáv…
- Variável declarada em um code block é undefined em outro - Para variáveis com uma abrangência maior, package level sco…
- Tipos em Go são extremamente importantes. (Veremos mais quando chegarmos em métodos e interfaces.) - Tipos em Go são e…
- Declaração vs. inicialização vs. atribuição de valor. Variáveis: caixas postais. - O que é valor zero? - Os zeros: …
- Setup: strings, ints, bools. - Strings: interpreted string literals vs. raw string literals. - Rune literals. …
- Revisando: tipos em Go são extremamente importantes. (Veremos mais quando chegarmos em métodos e interfaces.) - Tem um…
- Conversão de tipos é o que soa. - Em Go não se diz casting, se diz conversion. - a = int(b) - ref/spec#Conversions - F…
- Esses são seus primeiros exercícios, e seus primeiros passos. - Completando os exercícios dessa seção, você será um ni…
- Use var para declarar três variáveis. Elas devem ter package-level scope. Não atribua valores a estas variáveis. Utili…
- Utilizando a solução do exercício anterior: 1. Em package-level scope, atribua os seguintes valores às variáveis: …
- Crie um tipo. O tipo subjacente deve ser int. - Crie uma variável para este tipo, com o identificador "x", utilizando …
- Utilizando a solução do exercício anterior: 1. Em package-level scope, utilizando a palavra-chave var, crie uma va…
- Prova! - Link: https://forms.gle/yutXCZCjsgBzMfxK8 - Se você deu pausa e fez todos os exercícios anteriores você mesmo…
- Agora vamos explorar os tipos de maneira mais detalhada. golang.org/ref/spec. A começar pelo bool. - O tipo bool é um …
- Isso é importante pois daqui pra frente vamos falar de ints, bytes, e etc. - Não é necessário um conhecimento a fundo …
- int vs. float: Números inteiros vs. números com frações. - golang.org/ref/spec ? numeric types - Integers: - Númer…
- Um uint16, por exemplo, vai de 0 a 65535. - Que acontece se a gente tentar usar 65536? - Ou se a gente estiver em 6553…
- Strings são sequencias de bytes. - Imutáveis. - Uma string é um "slice of bytes" (ou, em português, uma fatia de bytes…
- Base-10: decimal, 0–9 - Base-2: binário, 0–1 - Base-16: hexadecimal, 0–f - https://docs.google.com/document/d/1GqXpubh…
- São valores imutáveis. - Podem ser tipadas ou não: - const oi = "Bom dia" - const oi string = "Bom dia" - As n…
- golang.org/ref/spec - Numa declaração de constantes, o identificador iota representa números sequenciais. - Na prática…
- Deslocamento de bits é quando deslocamos digitos binários para a esquerda ou direita. - https://play.golang.org/p/7MOn…
- Escreva um programa que mostre um número em decimal, binário, e hexadecimal. - Solução: https://play.golang.org/p/X7qm…
- Escreva expressões utilizando os operadores, e atribua seus valores a variáveis. - Demonstre estes valores. - Solução:…
- Crie constantes tipadas e não-tipadas. - Demonstre seus valores. - Solução: https://play.golang.org/p/eWnKI59ual ? C…
- Crie um programa que: - Atribua um valor int a uma variável - Demonstre este valor em decimal, binário e hexad…
- Crie uma variável de tipo string utilizando uma raw string literal. - Demonstre-a. - Solução: https://play.golang.org/…
- Utilizando iota, crie 4 constantes cujos valores sejam os próximos 4 anos. - Demonstre estes valores. - Solução: https…
- Prova! - Link: https://forms.gle/7KnotnBg3qXvGGyj7 - Motivação. Ninja nível 2! ? Compartilhe sua solução e converse …
- Computadores lêem programas de uma certa maneira, do mesmo jeito que nós lemos livros, por exemplo, de uma certa manei…
- For - Inicialização, condição, pós - Ponto e vírgula? - gobyexample.com - Não existe while!
- For - Repetição hierárquica - Exemplos: relógio, calendário
- For: inicialização, condição, pós - For: condição ("while") - For: ...ever? (http servers) - For: break - golang.org/r…
- Operação módulo: % - For: break - For: continue - Go Playground: https://play.golang.org/p/gpKMP1wAEM & https://play.g…
- Desafio surpresa! - Format printing: - Decimal %d - Hexadecimal %#x - Unicode %#U - Tab …
- If: bool - If: o operador não ? "!" - If: declaração de inicialização - Go Playground: https://play.golang.org/p/6nq2T…
- If, else. - If, else if, else. - If, else if, else if, ..., else. - Go Playground: https://play.golang.org/p/18VrRX2pe…
- Switch: - pode avaliar uma expressão - switch statement == case (value) - default switch statemen…
- Pode avaliar tipos - Pode haver uma expressão de inicialização
- && - || - ! - Go Playground: https://play.golang.org/p/MFwrt93xlc - Qual o resultado de fmt.Println... - true && t…
- Põe na tela: todos os números de 1 a 10000. - Solução: https://play.golang.org/p/MkdZiDW8SQ ? Compartilhe sua solução…
- Põe na tela: O unicode code point de todas as letras maiúsculas do alfabeto, três vezes cada. - Por exemplo: 65 …
- Crie um loop utilizando a sintaxe: for condition {} - Utilize-o para demonstrar os anos desde que você nasceu. - Soluç…
- Crie um loop utilizando a sintaxe: for {} - Utilize-o para demonstrar os anos desde que você nasceu. - Solução: https:…
- Demonstre o resto da divisão por 4 de todos os números entre 10 e 100 - Solução: https://play.golang.org/p/zcEsXqnBr8 …
- Crie um programa que demonstre o funcionamento da declaração if. - Solução: https://play.golang.org/p/OGPgTJZbiy ? C…
- Utilizando a solução anterior, adicione as opções else if e else. - Solução: https://play.golang.org/p/_cO7E-yL0o ? …
- Crie um programa que utilize a declaração switch, sem switch statement especificado. - Solução: https://play.golang.or…
- Crie um programa que utilize a declaração switch, onde o switch statement seja uma variável do tipo string com identif…
- Anote (à mão) o resultado das expressões: - fmt.Println(true && true) - fmt.Println(true && false) - fmt…
- Estruturas de dados, ou agrupamentos de dados, nos permitem agrupar valores diferentes. Estes valores podem ser ou não…
- O que são tipos de dados compostos? - Wikipedia: Composite_data_type - Effective Go: Composite literals -…
- Slices: - Tamanho: len(x) - Índice específico: x[i] (0-based) - Para ver todos os itens de uma slice utilizamo…
- x[:], x[a:], x[:b], x[a:b] - "a" é incluso; - "b" não é. - Exemplo: cabeça magnética de um disco rígido (relógio, fita…
- Effective Go: append (package builtin) - x = append(slice, ...values) - x = append(slice, slice...) - Todd: unfurl ? d…
- Slices são feitas de arrays. - Elas são dinâmicas, podem mudar de tamanho. - Sempre que isso acontece, um novo array é…
- Slices multi-dimensionais são slices que contem slices. - São como planilhas. - [][]type - Go Playground: https://play…
- Isso tudo aqui a gente já viu: - Toda slice tem um array subjacente. - Um slice é: um ponteiro/endereço para um array,…
- Utiliza o formato key:value. - E.g. nome e telefone - Performance excelente para lookups. - map[key]value{ key: value …
- Range: for k, v := range map { } - Reiterando: maps *não tem ordem* e um range usará uma ordem aleatória. - Go Playgro…
- Usando uma literal composta: - Crie um array que suporte 5 valores to tipo int - Atribua valores aos seus ín…
- Usando uma literal composta: - Crie uma slice de tipo int - Atribua 10 valores a ela - Utilize range para demo…
- Utilizando como base o exercício anterior, utilize slicing para demonstrar os valores: - Do primeiro ao terceiro i…
- Começando com a seguinte slice: - x := []int{42, 43, 44, 45, 46, 47, 48, 49, 50, 51} - Anexe a ela o valor 52; - A…
- Comece com essa slice: - x := []int{42, 43, 44, 45, 46, 47, 48, 49, 50, 51} - Utilizando slicing e append, crie um…
- Crie uma slice usando make que possa conter todos os estados do Brasil. - Os estados: "Acre", "Alagoas", "Amapá", …
- Crie uma slice contendo slices de strings ([][]string). Atribua valores a este slice multi-dimensional da seguinte man…
- Crie um map com key tipo string e value tipo []string. - Key deve conter nomes no formato sobrenome_nome - Val…
- Utilizando o exercício anterior, adicione uma entrada ao map e demonstre o map inteiro utilizando range. - Solução: ht…
- Utilizando o exercício anterior, remova uma entrada do map e demonstre o map inteiro utilizando range. ? Compartilhe …
- Struct é um tipo de dados composto que nos permite armazenar valores de tipos *diferentes.* - Seu nome vem de "structu…
- Structs dentro de structs dentro de structs. - Exemplo: um corredor de fórmula 1 é uma pessoa (nome, sobrenome, idade)…
- É importante se familiarizar com a documentação da linguagem Go. - Neste vídeo vamos ver um pouco sobre o que a docume…
- São structs sem identificadores. - x := struct { name type }{ name: value } - Go Playground: https://play.golang.org/p…
- Crie um tipo "pessoa" com tipo subjacente struct, que possa conter os seguintes campos: - Nome - Sobrenome …
- Utilizando a solução anterior, coloque os valores do tipo "pessoa" num map, utilizando os sobrenomes como key. - Demon…
- Crie um novo tipo: veículo - O tipo subjacente deve ser struct - Deve conter os campos: portas, cor - Crie doi…
- Crie e use um struct anônimo. - Desafio: dentro do struct tenha um valor de tipo map e outro do tipo slice. - Solução:…
- Qual a utilidade de funções? - Abstrair funcionalidade - Reutilização de código - func (receiver) identifier(p…
- Quando temos uma slice, podemos passar os elementos individuais através "deste..." operador. - Exemplos: - Desenro…
- Funções são ótimas pois tornam nosso código modular. Podemos alterar partes do nosso programa sem afetar o resto! - Um…
- Um método é uma função anexada a um tipo. - Quando se anexa uma função a um tipo, ela se torna um método desse tipo. -…
- Em Go, valores podem ter mais que um tipo. - Uma interface permite que um valor tenha mais que um tipo. - Declaração: …
- Anonymous self-executing functions ? Funções anônimas auto-executáveis. - func(p params) { ... }() - Vamos ver bastant…
- f := func(p params){ ... } - f() - Go Playground: https://play.golang.org/p/cPxhPUbfLy
- Pode-se usar uma função como retorno de uma função - Declaração: func f() return - Exemplo: func f() func() int { [...…
- Primeiro veja se você entende isso: https://play.golang.org/p/QkAtwMZU-z - Callback é passar uma função como argumento…
- Closure é cercar ou capturar um scope para que possamos utilizá-lo em outro contexto. Já vimos: - Package-level sc…
- WP: "The most common application of recursion is in mathematics and computer science, where a function being defined i…
- Exercício: - Crie uma função que retorne um int - Crie outra função que retorne um int e uma string - Cham…
- Crie uma função que receba um parâmetro variádico do tipo int e retorne a soma de todos os ints recebidos; - Passe um …
- Utilize a declaração defer de maneira que demonstre que sua execução só ocorre ao final do contexto ao qual ela perten…
- Crie um tipo struct "pessoa" que contenha os campos: - nome - sobrenome - idade - Crie um método para "pes…
- Crie um tipo "quadrado" - Crie um tipo "círculo" - Crie um método "área" para cada tipo que calcule e retorne a área d…
- Crie e utilize uma função anônima. - Solução: https://play.golang.org/p/Kgo6hVr5G5 ? Compartilhe sua solução e conver…
- Atribua uma função a uma variável. - Chame essa função. - Solução: https://play.golang.org/p/RMHLL3N5Ww ? Compartilhe…
- Crie uma função que retorna uma função. - Atribua a função retornada a uma variável. - Chame a função retornada. - Sol…
- Callback: passe uma função como argumento a outra função. - Solução: https://play.golang.org/p/2epLD_Yyap ? Compartil…
- Demonstre o funcionamento de um closure. - Ou seja: crie uma função que retorna outra função, onde esta outra função f…
- Uma das melhores maneiras de aprender é ensinando. - Para este exercício escolha o seu código favorito dentre os que v…
- Todos os valores ficam armazenados na memória. - Toda localização na memória possui um endereço. - Um pointeiro se ref…
- Ponteiros permitem compartilhar endereços de memória. Isso é útil quando: - Não queremos passar grandes volumes de…
- Crie um valor e atribua-o a uma variável. - Demonstre o endereço deste valor na memória. - Solução: https://play.golan…
- Crie um struct "pessoa" - Crie uma função chamada mudeMe que tenha *pessoa como parâmetro. Essa função deve mudar um v…
- Já entendemos ponteiros, já entendemos métodos. Já temos o conhecimento necessário para começar a utilizar a standard …
- Exemplo: transformando structs em Go em código JSON. - No improviso tambem. - Go Playground: https://play.golang.org/p…
- E agora o contrário. - Link: https://cdn.rawgit.com/GoesToEleven/golang-web-dev/17e3852d/040_json/README.html - JSON-t…
- A interface writer do pacote io. - type Writer interface { Write(p []byte) (n int, err error) } - pkg os: func (…
- Sort serve para ordenar slices. - Como faz? - golang.org/pkg/ ? sort - godoc.org/sort ? examples - Sor…
- O sort que eu quero não existe. Quero fazer o meu. - Para isso podemos usar o func Sort do package sort. Vamos precisa…
- É uma maneira de encriptar senhas utilizando hashes. - x/crypto/bcrypt - GenerateFromPassword - CompareHashAnd…
- Partindo do código abaixo, utilize marshal para transformar []user em JSON. - https://play.golang.org/p/U0jea43X55…
- Partindo do código abaixo, utilize unmarshal e demonstre os valores. - https://play.golang.org/p/b_UuCcZag9 - Dica…
- Partindo do código abaixo, utilize NewEncoder() e Encode() para enviar as informações como JSON para Stdout. - htt…
- Partindo do código abaixo, ordene a []int e a []string. - https://play.golang.org/p/H_q75mpmHW - Solução: https://…
- Partindo do código abaixo, ordene os []user por idade e sobrenome. - https://play.golang.org/p/BVRZTdlUZ_ - Os val…
- Concorrência é quando abre uma padaria do lado da outra e as duas quebram :) - Fun facts: - O primeiro CPU dual c…
- O código abaixo é linear. Como fazer as duas funções rodarem concorrentemente? - https://play.golang.org/p/XP-ZMeH…
- Agora vamos dar um mergulho na documentação: - https://golang.org/doc/effective_go.html#concurrency - https://…
- Aqui vamos replicar a race condition mencionada no artigo anterior. - time.Sleep(time.Second) vs. runtime.Gosched(…
- Agora vamos resolver a race condition do programa anterior utilizando mutex. - Mutex é mutual exclusion, exclusão mútu…
- Agora vamos fazer a mesma coisa, mas com atomic ao invés de mutex. - atomic.AddInt64 - atomic.LoadInt64 - Códi…
- Terminologia: - GUI: Graphical User Interface - CLI: Command Line Interface - Terminal, console, etc …
- $GOPATH/ bin/ pkg/ src/ github.com/ [Nome do usuário (github.com)]/ [N…
- Integrated development environment. WP: "[...] é um programa de computador que reúne características e ferramentas de …
- go version - go env - go help - go fmt - ./… - go run - go run [file name] - go run *.go - go build - …
- Git foi feito pelo Linus Torvalds. O cara que criou o Linux. - GitHub, GitLab. - Como funciona? - Vá em github.com…
- Clonando um repo git clone [repo] - SSH - Mac/Linux: ssh-keygen -t rsa - id_rsa: Esta é sua chave priv…
- GOOS - GOARCH - `GOOS=darwin GOARCH=amd64 go build test.go` - https://godoc.org/runtime#pkg-constants - git push - git…
- Opção 1: uma pasta, vários arquivos. - package declaration em todos os arquivos - package scope: um elemento d…
- Alem da goroutine principal, crie duas outras goroutines. - Cada goroutine adicional devem fazer um print separado. - …
- Esse exercício vai reforçar seus conhecimentos sobre conjuntos de métodos. - Crie um tipo para um struct chamado "…
- Utilizando goroutines, crie um programa incrementador: - Tenha uma variável com o valor da contagem - Crie um …
- Utilize mutex para consertar a condição de corrida do exercício anterior. - Solução: https://github.com/ellenkorbes/ap…
- Utilize atomic para consertar a condição de corrida do exercício #3. - Solução: https://github.com/ellenkorbes/aprenda…
- Crie um programa que demonstra seu OS e ARCH. - Rode-o com os seguintes comandos: - go run - go build - go…
- "If you do not leave your comfort zone, you do not remember the trip" — Brian Chesky - Faça download e instale: https:…
- Canais são o Jeito Certo® de fazer sincronização e código concorrente. - Eles nos permitem trasmitir valores entre gor…
Canais direcionais - Canais podem ser direcionais. - E isso serve pra...? - Um send channel e um receive channel são ti…
- Range: - gofunc com for loop com send e close(chan) - recebe com range chan - Código: https://play.golang.org…
- Select é como switch, só que pra canais, e não é sequencial. - "A select blocks until one of its cases can run, then i…
- v, ok := ?chan - Se receber valor: v, true - Canal fechado, nada, etc.: zero v, false - Agora vamos resolver o problem…
- Observamos convergência quando informação de vários canais é enviada a um número menor de canais. - Interessante: - Na…
- Divergência é o contrário de convergência :) - Na prática, exemplos: - 1. Um stream vira centenas de go funcs que …
- Só pra ter uma idéia geral: - Se a gente lança 500 goroutines pra fazer uma tarefa, e cancelamos a tarefa no meio do c…
- Nível 10?! Êita! Parabéns! - Faça esse código funcionar: https://play.golang.org/p/j-EA6003P0 - Usando uma função …
- Faça esse código funcionar: https://play.golang.org/p/oB-p3KMiH6 - Solução: https://play.golang.org/p/isnJ8hMMKg ? Co…
- Utilizando este código: https://play.golang.org/p/sfyu4Is3FG - ...use um for range loop para demonstrar os valores do …
- Utilizando este código: https://play.golang.org/p/MvL6uamrJP - ...use um select statement para demonstrar os valores d…
- Utilizando este código: https://play.golang.org/p/YHOMV9NYKK - ...demonstre o comma ok idiom. - Solução: https://play.…
- Escreva um programa que coloque 100 números em um canal, retire os números do canal, e demonstre-os. - Solução: https:…
- Crie um programa que lance 10 goroutines onde cada uma envia 10 números a um canal; - Tire estes números do canal e de…
- Para quem já programa em outras linguagens: - Em Go não temos exceções. ? https://golang.org/doc/faq#exceptions …
Na minha religião, underscore é pecado. Verifique seus erros! (Exceção: fmt.Println) Na prática: Exe…
- Opções: - fmt.Println() ? stdout - log.Println() ? timestamp + pode-se determinar onde o erro ficará logado …
- https://blog.golang.org/defer-panic-and-recover - https://golang.org/pkg/builtin/#recover - Exemplo: https://play.gola…
- Para que nossas funções retornem erros customizados, podemos utilizar: - return errors.New() - return fmt.Erro…
- Utilizando este código: https://play.golang.org/p/3W69TH4nON - ...remova o underscore e verifique e lide com o erro de…
- Utilizando este código: https://play.golang.org/p/9a1IAWy5E6 - ...crie uma mensagem de erro customizada utilizando fmt…
- Crie um struct "erroEspecial" que implemente a interface builtin.error. - Crie uma função que tenha um valor do tipo …
- Utilizando este código: https://play.golang.org/p/wlEM1tgfQD - ...use o struct sqrt.Error como valor do tipo erro. - S…
- Nos capítulos seguintes, uma das coisas que veremos é testes. - Para testar sua habilidade de se virar por conta própr…
- Antes de escrever documentação, vamos ver como lê-la. Temos algumas possibilidades: - golang.org ? documentação da…
- go help doc - go doc demonstra a documentação de um package, const, func, type, var, método, etc. - go doc aceita zero…
- godoc extrai e gera documentação de programas em Go. Funciona de duas maneiras: - Sem o flag http é um comando nor…
- Documentação da standard library e outros - Como colocar a documentação do seu package no godoc.org - refresh, delete
- Documentação é uma parte extremamente importante de fazer com que software seja acessível e sustentável. - Documentaçã…
- Crie um package "cachorro". - Este package deverá exportar uma função Idade, que toma como parâmetro um número de …
- Coloque seu código no GitHub. - Faça sua documentação aparecer em godoc.org, e tire um screenshot. - Delete seu código…
- Use godoc na linha de comando para ver a documentação sobre: - fmt - fmt Print - strings - strconv ? …
- Testes devem: - ficar num arquivo cuja terminação seja _test.go - ficar na mesma package que o código a ser te…
- Podemos escrever testes em série para testar variedades de situações. - Exemplo: - struct test, fields: data []int…
- Outra maneira é fazer testes como exemplos. - Estes exemplos são os mesmos que aparecem na documentação. - Para exempl…
- gofmt: formata o código - go vet: correctness ? procura constructs suspeitos - golint: suggestions ? procura coding st…
- Benchmarks nos permitem testar a velocidade ou performance do nosso código. - Na prática: - Arquivo: _test.go …
- "Cobertura" em se tratando de testes se refere a quanto do seu código, percentualmente, está sendo testado. (E antes q…
This video is private.
Sobre o Canal
Course Preview