Skip to content

Latest commit

 

History

History
334 lines (222 loc) · 7.45 KB

go.md

File metadata and controls

334 lines (222 loc) · 7.45 KB

Go

Go (também conhecido como Golang) é uma linguagem de programação open-source desenvolvida pelo Google. Ela é conhecida pela simplicidade, eficiência e forte suporte a concorrência. O Go foi projetado para programação de sistemas e desenvolvimento web, sendo uma excelente escolha para construir aplicações escaláveis, microsserviços e mais.


Índice


Introdução

O Go é uma linguagem estaticamente tipada e compilada que prioriza a simplicidade e a eficiência. Foi criada pelo Google para resolver lacunas nas linguagens de programação existentes, especialmente em relação ao desempenho, concorrência e facilidade de uso. O Go é amplamente utilizado no desenvolvimento de backends, serviços em nuvem e ferramentas de infraestrutura devido à sua rápida execução e forte suporte a concorrência.

Os principais recursos do Go incluem:

  • Simplicidade: O Go visa manter a sintaxe simples e fácil de entender, tornando-se adequado tanto para iniciantes quanto para programadores experientes.
  • Concorrência: Suporte nativo para programação concorrente usando goroutines e canais.
  • Desempenho: Compilado para código de máquina, proporcionando desempenho semelhante ao C/C++.

Instalação do Go

Para começar a utilizar o Go, você precisará instalá-lo no seu sistema.

Windows, macOS, Linux

  1. Baixe o Go do site oficial do Go.

  2. Siga as instruções de instalação para o seu sistema operacional.

  3. Verifique a instalação executando o seguinte comando no terminal:

    go version

    Isso deve exibir a versão do Go instalada.

Configuração do Workspace do Go

O Go utiliza um workspace para organizar o código. O workspace consiste em um diretório raiz que contém três subdiretórios: src, pkg e bin.

  1. Defina o caminho do workspace do Go adicionando a seguinte variável de ambiente:

    export GOPATH=$HOME/go
    export PATH=$PATH:$GOPATH/bin
  2. Agora você pode começar a escrever programas Go dentro do diretório $GOPATH/src.


Sintaxe Básica

O Go possui uma sintaxe simples, semelhante ao C, mas com algumas melhorias.

Exemplo "Hello World"

package main

import "fmt"

func main() {
    fmt.Println("Olá, Mundo!")
}
  • package main define o nome do pacote.
  • import "fmt" importa o pacote padrão utilizado para entrada e saída formatada.
  • A função main é o ponto de entrada de um programa Go.

Variáveis e Constantes

No Go, as variáveis são tipadas estaticamente, e você precisa declará-las explicitamente.

Declaração de Variáveis

var nome string = "João"
var idade int = 30

Você também pode usar a notação abreviada:

nome := "João"  // Tipo automaticamente inferido
idade := 30     // Tipo automaticamente inferido

Constantes

O Go suporta valores constantes, que são imutáveis depois de definidos.

const Pi = 3.14159
const Saudacao = "Olá, Go!"

Fluxo de Controle

O Go oferece estruturas de controle padrão como if, else, for e switch.

If-Else

if idade >= 18 {
    fmt.Println("Adulto")
} else {
    fmt.Println("Menor de idade")
}

Laço For

O Go tem apenas uma estrutura de laço: for.

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

Switch

switch dia := "Segunda-feira"; dia {
case "Segunda-feira":
    fmt.Println("Início da semana")
case "Sexta-feira":
    fmt.Println("Fim da semana")
default:
    fmt.Println("Meia semana")
}

Funções

No Go, as funções são definidas usando a palavra-chave func.

Definição de Função

func saudacao(nome string) string {
    return "Olá, " + nome
}

fmt.Println(saudacao("João"))

Múltiplos Valores de Retorno

O Go permite múltiplos valores de retorno de uma função:

func obterNomeEIdade() (string, int) {
    return "João", 30
}

nome, idade := obterNomeEIdade()
fmt.Println(nome, idade)

Structs e Interfaces

O Go permite a criação de tipos complexos utilizando structs e interfaces.

Structs

Uma struct é uma coleção de campos que pode conter diferentes tipos de dados.

type Pessoa struct {
    Nome string
    Idade int
}

pessoa := Pessoa{"João", 30}
fmt.Println(pessoa.Nome, pessoa.Idade)

Interfaces

Uma interface define um conjunto de assinaturas de métodos que um tipo deve implementar.

type Falante interface {
    Falar() string
}

type Pessoa struct {
    Nome string
}

func (p Pessoa) Falar() string {
    return "Olá, " + p.Nome
}

var falante Falante = Pessoa{"João"}
fmt.Println(falante.Falar())

Concorrência no Go

O Go tem suporte nativo para concorrência usando goroutines e canais.

Goroutines

Uma goroutine é uma thread leve que executa concorrente com outras funções.

go func() {
    fmt.Println("Isso é executado em uma goroutine")
}()

Canais

Canais permitem que goroutines se comuniquem entre si.

ch := make(chan string)

go func() {
    ch <- "Olá da goroutine"
}()

msg := <-ch
fmt.Println(msg)

Manipulação de Arquivos e Diretórios

Go fornece pacotes como os, io e os/exec para trabalhar com arquivos e diretórios.

Leitura de Arquivo

import (
    "fmt"
    "io/ioutil"
)

data, err := ioutil.ReadFile("arquivo.txt")
if err != nil {
    fmt.Println(err)
}
fmt.Println(string(data))

Escrita em Arquivo

err := ioutil.WriteFile("arquivo.txt", []byte("Olá, Go!"), 0644)
if err != nil {
    fmt.Println(err)
}

Tratamento de Erros

O tratamento de erros no Go é explícito e é feito verificando o valor de erro retornado pelas funções.

f, err := os.Open("arquivo.txt")
if err != nil {
    fmt.Println(err)
    return
}
defer f.Close()

Solução de Problemas Comuns

Problema 1: "undefined: [função/variável]"

Este erro ocorre quando você referencia algo que não foi declarado ou importado corretamente.

Solução: Certifique-se de que todas as funções e variáveis estão definidas corretamente e que todos os pacotes necessários foram importados.

Problema 2: "cannot use [valor] (type [tipo]) as [tipo] value"

Esse erro ocorre quando há uma incompatibilidade de tipo entre o esperado e o fornecido.

Solução: Verifique se os tipos corretos estão sendo usados em atribuições ou chamadas de função.