Escolar Documentos
Profissional Documentos
Cultura Documentos
INTRODUÇÃO A LINGUAGEM DE
PROGRAMAÇÃO
Kage Jinsei
Credits / Créditos
Ashley Willis
__________________________
Imagens do Gopher:
https://github.com/ashleymcnamara/gophers
Ashley Willis
__________________________
W3Schools: https://www.w3schools.com/
OpenAI: https://chat.openai.com/
__________________________
Inspiração e Ideias:
W3Schools: https://www.w3schools.com/
OpenAI: https://chat.openai.com/
Sumário
1. Introdução a Go....................................................................................................5
2. Configurando ambiente........................................................................................7
3. Estrutura básica do programa............................................................................20
4. Módulos..............................................................................................................22
5. Olá, Mundo!........................................................................................................25
6. Comentários.......................................................................................................28
7. Tipos, valores e variáveis...................................................................................30
8. Constantes......................................................................................................... 34
9. Outputs...............................................................................................................38
10. Verbos de formatação......................................................................................40
11. Tipos de dados................................................................................................. 43
12. Arrays............................................................................................................... 53
13. Slices................................................................................................................57
14. Operadores.......................................................................................................65
15. Estruturas condicionais....................................................................................71
16. Switch...............................................................................................................78
17. Loops................................................................................................................82
18. Functions..........................................................................................................89
19. Structs............................................................................................................ 101
20. Maps...............................................................................................................104
5
1. Introdução a Go
Concorrência e Paralelismo:
Go foi projetada com suporte integrado para concorrência e
paralelismo. Ela possui primitivas de concorrência, como
goroutines (unidades leves de execução) e canais (mecanismo de
comunicação entre goroutines), facilitando a construção de
programas concorrentes de maneira eficiente
Simplicidade e Legibilidade:
Go foi projetada com uma sintaxe simples e clara. A linguagem
evita recursos complexos e excessivamente abstratos, o que
facilita a leitura e manutenção do código. A ideia é que o código
seja claro e compreensível sem a necessidade de muita
explicação.
6
Compilação Rápida:
Go é uma linguagem compilada e a compilação é rápida, o que
ajuda no desenvolvimento eficiente. Ela também suporta a
compilação cruzada, permitindo que você compile o código para
diferentes sistemas operacionais e arquiteturas.
Orientação a Interfaces:
Go segue um paradigma de programação orientada a interfaces.
Em vez de depender de herança de classes, o Go incentiva a
composição de tipos através de interfaces, proporcionando
flexibilidade e reutilização de código.
2. Configurando ambiente
CMD:
C:\Users\Kage Jinsei> go version
go version go1.21.5 windows/amd64
PowerShell:
PS C:\Users\Kage Jinsei> go version
go version go1.21.5 windows/amd64
Passo 1 - Download:
Como mencionado anteriormente, existem duas formas de fazer a
instalação do Go no Linux, a primeira delas é pelo gerenciador de
pacotes da sua distribuição Linux. Segue abaixo algumas
distribuições e a forma de instalação:
Debian/Ubuntu:
- sudo apt update && sudo apt upgrade
- sudo apt install golang
Arch/Manjaro:
- sudo pacman -Syyu
- sudo pacman -S go
Fedora:
- sudo dnf check-update && sudo dnf upgrade
- sudo dnf install go
OpenSUSE:
- sudo zyper update
- sudo zypper install go
export PATH=$PATH:/usr/local/go/bin
Bash:
14
- source ~/.bashrc
Zsh:
- source ~/.zshrc
Terminal:
> go version
go version go1.21.5 linux/amd64
Pacote (package):
Cada arquivo Go pertence a um pacote, e o pacote principal de um
programa executável deve ser chamado de main. Isso indica que é
um programa executável.
Imports (import):
Após a declaração do pacote, você pode importar outros pacotes
necessários para o seu programa. No exemplo, estamos
importando o pacote "fmt" para formatação de saída.
20
Função Principal (func main()):
Todo programa Go executável deve ter uma função chamada main.
Esta é a função que será executada quando o programa for
iniciado. O código dentro desta função será a entrada principal do
seu programa.
4. Módulos
Gerenciamento de Dependências:
Ao iniciar um módulo com go mod init, você está criando um
ambiente onde o Go pode gerenciar suas dependências de forma
estruturada. O arquivo go.mod resultante conterá informações
sobre os módulos usados pelo seu projeto, incluindo suas versões.
Controle de Versão:
O go.mod inclui informações sobre as versões específicas das
dependências utilizadas no projeto. Isso garante que, ao
compartilhar o código ou ao reproduzi-lo em outro ambiente, as
mesmas versões das dependências serão usadas, promovendo
consistência.
Facilita a Colaboração:
O uso de módulos torna mais fácil para outros desenvolvedores
colaborarem no seu projeto. Eles podem clonar o repositório e, ao
executar go get, o Go baixará automaticamente as dependências
corretas.
22
Compatibilidade com Versionamento Semântico:
O Go incentiva o uso de versionamento semântico (SemVer) para
módulos. Isso significa que você pode especificar regras claras
sobre como suas dependências podem ser atualizadas, evitando
surpresas em atualizações automáticas.
Simplifica o Controle de Versão com Git:
Quando você inicializa um módulo, o go mod init também cria
automaticamente uma entrada no arquivo .gitignore para ignorar o
diretório vendor/ (onde as dependências são armazenadas). Isso
ajuda a manter o controle de versão do seu projeto mais limpo.
Iniciando o módulo:
5. Olá, Mundo!
6. Comentários
Explicação do Código:
Comentários ajudam a explicar o propósito, a lógica e a
funcionalidade do código. Isso torna mais fácil para outros
desenvolvedores entenderem o que o código está fazendo.
Documentação do Código:
Comentários podem servir como uma forma de documentação
embutida, fornecendo informações sobre como usar funções,
classes ou módulos específicos.
Tipos:
Go é uma linguagem de programação estaticamente tipada, o que
significa que as variáveis têm tipos definidos em tempo de
compilação. Os tipos em Go incluem tipos básicos (inteiros, ponto
flutuante, booleanos, etc.) e tipos compostos (structs, slices, maps,
arrays, etc.).
Exemplos de tipos básicos:
30
Exemplos de tipos compostos:
Valores:
Os valores são as instâncias específicas de um tipo. Por exemplo,
42 é um valor do tipo int, e "Olá" é um valor do tipo string.
Os valores em Go têm zero values, o que significa que, se você
declara uma variável sem atribuir um valor, ela receberá um valor
padrão dependendo do tipo. Veja um exemplo:
Variáveis:
Variáveis em Go são espaços de armazenamento com um nome
que armazenam valores de um tipo específico.
Você declara variáveis usando a palavra-chave var, seguida pelo
nome da variável e seu tipo, e pode inicializá-las com um valor.
31
Em Go, também existe a variável inferida, que refere-se à
capacidade do compilador de decidir automaticamente o tipo de
uma variável com base no valor que está sendo atribuído a ela. A
declaração curta de variáveis “:=” é a principal maneira de criar
variáveis inferidas em Go.
Aqui está um exemplo simples:
Cada variável tem um estilo diferente, cada estilo tem o seu nome.
33
8. Constantes
Em Go, constantes são valores fixos que não variam durante a
execução do programa. Elas oferecem uma maneira de nomear e
utilizar valores imutáveis que são conhecidos em tempo de
compilação. A declaração de constantes é realizada mediante o
uso da palavra-chave const, seguida pelo nome da constante e
pelo valor que lhe é atribuído. Este mecanismo proporciona clareza
e consistência ao código, sendo especialmente útil para
representar valores que não devem ser alterados ao longo da
execução do programa, como constantes matemáticas, limites ou
códigos predefinidos.
Declaração de Constantes:
Para declarar uma constante, use a palavra-chave const seguida
pelo nome da constante e pelo valor.
34
Tipos em Constantes:
Ao contrário das variáveis, você não precisa especificar
explicitamente o tipo da constante, pois o compilador infere o tipo
com base no contexto. Mas também é possível declarar o tipo.
9. Outputs
%v (Verbo de Valor):
Utilizado para imprimir o valor de uma variável na sua forma
natural, sem formatação específica.
%d (Verbo Decimal):
Utilizado para formatar números inteiros.
40
%f (Verbo Ponto Flutuante):
Utilizado para formatar números de ponto flutuante.
%s (Verbo String):
Utilizado para formatar strings.
41
%t (Verbo Booleano):
Utilizado para formatar valores booleanos.
%b (Verbo Binário):
Utilizado para formatar números em representação binária.
Declaração de Variáveis:
Você pode declarar variáveis do tipo bool da seguinte maneira:
Tipo (int):
O tipo int representa inteiros com sinal. O tamanho do int é
dependente da arquitetura do sistema onde o código está sendo
compilado, sendo um int32 em sistemas de 32 bits e um int64 em
sistemas de 64 bits.
Exemplo:
45
Tipo (int):
- Tamanho: depende da plataforma, sendo 32 bits em sistemas de
32 bits e 64 bits em sistemas de 64 bits.
- Faixa: -2147483648 a 2147483647 em sistemas de 32 bits e -
9223372036854775808 a 9223372036854775807 em sistemas de
64 bits.
Tipo (int8):
- Tamanho: 8 bits/1 byte.
- Faixa: -128 a 127.
Tipo (int16):
- Tamanho: 16 bits/2 bytes.
- Faixa: -32768 a 32767.
Tipo (int32):
- Tamanho: 32 bits/4 bytes.
- Faixa: -2147483648 a 2147483647.
46
Tipo (int64):
- Tamanho: 64 bits/8 bytes.
- Faixa: -9223372036854775808 a 9223372036854775807.
uint:
O tipo uint representa inteiros sem sinal. O tamanho do uint é
dependente da arquitetura do sistema onde o código está sendo
compilado, sendo um uint32 em sistemas de 32 bits e um uint64
em sistemas de 64 bits.
Exemplo:
47
Tipo(uint):
- Tamanho: depende da plataforma, sendo 32 bits em sistemas de
32 bits e 64 bits em sistemas de 64 bits.
- Faixa: 0 a 4294967295 em sistemas de 32 bits e 0 a
18446744073709551615 em sistemas de 64 bits.
Tipo(uint8):
- Tamanho: 8 bits/1 byte.
- Faixa: 0 a 255.
Tipo(uint16):
- Tamanho: 16 bits/2 bytes.
- Faixa: 0 a 65535.
Tipo(uint32):
- Tamanho: 32 bits/4 bytes.
- Faixa: 0 a 4294967295.
Tipo(uint64):
48
- Tamanho: 64 bits/8 bytes.
- Faixa: 0 a 18446744073709551615.
Tipo(float32):
- Tamanho: 32 bits (4 bytes).
- Precisão: aproximadamente 7 dígitos decimais de precisão.
- Faixa: aproximadamente de -3.4e+38 a 3.4e+38.
- Significado: O tipo float32 em Go representa números de ponto
flutuante (números reais) com 32 bits de precisão. Isso significa
que pode representar números decimais com até sete dígitos
significativos, e sua faixa de valores vai de aproximadamente -3.4
vezes 10 elevado a 38 até 3.4 vezes 10 elevado a 38.
Exemplo:
50
Tipo(float64):
- Tamanho: 64 bits (8 bytes).
- Precisão: aproximadamente 15 dígitos decimais de precisão.
- Faixa: aproximadamente de -1.7e+308 a +1.7e+308.
- Significado: O tipo float64 em Go representa números de ponto
flutuante com maior precisão, usando 64 bits. Isso permite
representar números decimais com até 15 dígitos significativos. A
faixa de valores do float64 vai de aproximadamente -1.7 vezes 10
elevado a 308 até 1.7 vezes 10 elevado a 308.
Exemplo:
Declaração de Strings:
Você pode declarar uma string usando aspas duplas.
Imutabilidade:
Strings em Go são imutáveis, o que significa que, uma vez criada,
não é possível modificar seus caracteres individualmente. As
operações que parecem modificar uma string, na verdade, criam
uma nova string.
12. Arrays
Declaração de Arrays:
Arrays são declarados especificando o tipo dos elementos e seu
tamanho. A sintaxe básica é utilizando “var” é:
Inicialização de Arrays:
Se um array ou qualquer um de seus elementos não for
explicitamente inicializado no código, será atribuído a eles o valor
padrão correspondente ao seu tipo. É relevante notar que, para o
tipo “int”, o valor padrão é 0, enquanto para o tipo “string”, o valor
padrão é uma string vazia, representada por "". Essa característica
54
garante consistência e previsibilidade quando não há uma
inicialização explícita, proporcionando valores padrão coerentes
com os tipos de dados envolvidos.
Exemplo:
13. Slices
Este exemplo mostra como criar uma slice com a função make():
60
Neste exemplo, make([]int, 3) cria uma slice de inteiros com um
comprimento inicial de 3. Em seguida, valores são atribuídos aos
elementos do slice.
Veja um exemplo:
62
Neste exemplo, minhaSlice é uma slice de inteiros inicializada com
três elementos. A função append() é usada para adicionar novos
elementos à slice.
14. Operadores
Operadores aritméticos:
Operadores de atribuição:
Operadores lógicos:
Declarando if:
A declaração if é usada para executar um bloco de código
condicionalmente, dependendo da avaliação de uma expressão
booleana. Veja a sintaxe básica:
Declarando else:
A declaração else em Go é usada em conjunto com a declaração if
para especificar um bloco de código a ser executado quando a
condição do if for falsa. Veja a sintaxe:
16. Switch
Switch multi-case:
17. Loops
Loop Infinito:
Loops Aninhados:
Os loops aninhados em Go são uma construção onde um ou mais
loops estão contidos dentro de outro loop. Isso é útil quando você
precisa iterar sobre elementos em múltiplas dimensões, como em
matrizes bidimensionais ou em situações que exigem iterações
encadeadas.
Aqui está um exemplo simples de loops aninhados em Go, que
imprime um padrão de asteriscos em forma de retângulo:
18. Functions
Sintaxe Básica:
Chamando funções:
Funções não são executadas imediatamente. Elas são "salvas para
uso posterior" e serão executadas quando forem chamadas.
89
No exemplo abaixo, uma função chamada "saudacao()". A chave
de abertura ({) indica o início do código da função, e a chave de
fechamento (}) indica o fim da função. A função produz a saída
"Olá, Mundo!". Para chamar a função, basta escrever o seu nome
seguido por dois parênteses “()” dentro da função main:
Parâmetros e Argumentos:
As informações podem ser passadas para funções como
parâmetro. Os parâmetros atuam como variáveis dentro da função.
Os parâmetros e seus tipos são especificados após o nome da
função, entre parênteses. Você pode adicionar quantos parâmetros
quiser, basta separá-los com vírgula. Veja a sintaxe:
91
No exemplo a seguir, existe a função saudacao() com o parâmetro
(nome) do tipo string. Quando a função saudacao() é chamada,
também passamos um nome (ex: Alice), e o nome é usado dentro
da função, que gera vários nomes diferentes com a mesma
mensagem ao lado:
Se, por algum motivo, não quisermos utilizar alguns dos valores
retornados de uma função, podemos adicionar um sublinhado ( _ )
para indicar que desejamos omitir esses valores. Essa prática é útil
quando estamos cientes dos valores de retorno, mas não temos a
intenção de utilizá-los na lógica subsequente do programa.
97
Quando você usa o sublinhado ( _ ), está indicando ao compilador
que você não tem interesse em armazenar ou utilizar esse valor de
retorno específico. Veja um exemplo:
19. Structs
Neste exemplo:
Pessoa é uma struct que possui três campos: Nome (string), Idade
(int), e Altura (float64).
Uma instância da struct é criada com valores específicos para cada
campo.
Os campos da struct são acessados usando a notação de ponto
(pessoa1.Nome, pessoa1.Idade, pessoa1.Altura).
102
Passando Struct como Argumento de Função:
Em Go, você pode passar uma struct como argumento para uma
função da mesma maneira que faria com qualquer outro tipo de
dado. Aqui está um exemplo simples:
Veja a sintaxe básica para criar um map, tanto com var quanto com
o “:=”:
104
Exemplo:
110
Verificando Elementos Específicos em um Mapa:
Você pode verificar se uma determinada chave existe em um mapa
usando: