Menu
Coddy logo textTech

Folha de Consulta Go

Última atualização

Hello World e estrutura do programa

Todo programa Go fica em um pacote; o ponto de entrada é func main no pacote main.

OperaçãoSintaxe
Declaração de pacotepackage main
Importar um pacoteimport "fmt"
Importar vários pacotesimport (\n "fmt"\n "os"\n)
Ponto de entradafunc main() { ... }
Exibir uma linhafmt.Println("Hello, World!")
Impressão formatadafmt.Printf("%d items\n", n)
Executar um arquivogo run main.go
Compilar um bináriogo build

Variáveis e tipos

Go é tipado estaticamente, mas pode inferir tipos com :=.

OperaçãoSintaxe
Declarar com tipovar age int = 30
Declarar com inferênciavar name = "Ada"
Declaração curtacount := 0
Vários de uma vezx, y := 1, 2
Constanteconst Pi = 3.14
Valores zero0, "", false, nil
Tipos básicosint, float64, string, bool, byte, rune
Conversão de tipof := float64(i)

Controle de fluxo

Go tem uma única palavra-chave de laço - for - e não usa parênteses ao redor das condições.

OperaçãoSintaxe
If / elseif x > 0 { ... } else { ... }
If com instrução de inicializaçãoif v, ok := m[k]; ok { ... }
Laço for (estilo C)for i := 0; i < 10; i++ { ... }
Laço estilo whilefor x < 100 { ... }
Laço infinitofor { ... }
Range sobre um slicefor i, v := range items { ... }
Switchswitch day { case 1: ...; default: ... }
Switch sem expressãoswitch { case x > 0: ... }
Break / continuebreak, continue

Funções

Funções são valores de primeira classe e podem retornar múltiplos resultados.

OperaçãoSintaxe
Função básicafunc add(a int, b int) int { return a + b }
Tipo de parâmetro compartilhadofunc add(a, b int) int { ... }
Múltiplos valores de retornofunc divmod(a, b int) (int, int) { return a / b, a % b }
Valores de retorno nomeadosfunc split(sum int) (x, y int) { x = sum / 2; return }
Função variádicafunc sum(nums ...int) int { ... }
Função anônimaf := func() { ... }
Closurefunc counter() func() int { ... }
Defer (executa no return)defer file.Close()

Slices e arrays

Arrays têm tamanho fixo; slices são visões dinâmicas sobre arrays.

OperaçãoSintaxe
Array de tamanho fixovar a [3]int
Literal de slicenums := []int{1, 2, 3}
Criar um slices := make([]int, 0, 10)
Appends = append(s, 4)
Comprimento / capacidadelen(s), cap(s)
Fatiar um slices[1:3]
Copiarcopy(dst, src)
Iterarfor i, v := range s { ... }

Maps

Maps são as tabelas hash embutidas de Go.

OperaçãoSintaxe
Criar um mapm := make(map[string]int)
Literal de mapm := map[string]int{"a": 1, "b": 2}
Definir um valorm["c"] = 3
Obter um valorv := m["a"]
Verificar existênciav, ok := m["x"]
Excluir uma chavedelete(m, "a")
Comprimentolen(m)
Iterarfor k, v := range m { ... }

Structs e métodos

Structs agrupam campos; métodos anexam comportamento por meio de um receptor.

OperaçãoSintaxe
Definir uma structtype Point struct { X, Y int }
Criar uma instânciap := Point{X: 1, Y: 2}
Acessar um campop.X
Ponteiro para uma structp := &Point{1, 2}
Método com receptor por valorfunc (p Point) Dist() float64 { ... }
Método com receptor por ponteirofunc (p *Point) Move(dx int) { p.X += dx }
Struct embutidatype Circle struct { Point; R int }
Tags de structName string com uma tag json:"name" entre crases

Interfaces

Interfaces são satisfeitas implicitamente - qualquer tipo com os métodos certos se qualifica.

OperaçãoSintaxe
Definir uma interfacetype Shape interface { Area() float64 }
Implementar (implícito)func (c Circle) Area() float64 { ... }
Interface vazia (any)var x interface{} ou var x any
Asserção de tipos, ok := x.(string)
Switch de tiposwitch v := x.(type) { case int: ... }
Interface Stringerfunc (p Point) String() string { ... }

Goroutines e channels

Goroutines são threads leves; channels passam valores entre elas.

OperaçãoSintaxe
Iniciar uma goroutinego doWork()
Criar um channelch := make(chan int)
Channel com bufferch := make(chan int, 5)
Enviar para um channelch <- 42
Receber de um channelv := <-ch
Fechar um channelclose(ch)
Range sobre um channelfor v := range ch { ... }
Select em channelsselect { case v := <-ch: ...; default: ... }
Wait groupvar wg sync.WaitGroup; wg.Add(1); wg.Wait()
Mutexvar mu sync.Mutex; mu.Lock(); mu.Unlock()

Tratamento de erros

Go retorna erros como valores - não há exceções.

OperaçãoSintaxe
Retornar um errofunc read() (string, error) { return "", err }
Verificar um erroif err != nil { return err }
Criar um erroerrors.New("not found")
Erro formatadofmt.Errorf("bad id %d", id)
Envolver um errofmt.Errorf("load: %w", err)
Desembrulhar / compararerrors.Is(err, os.ErrNotExist)
Comparar por tipoerrors.As(err, &target)
Panic / recoverdefer func() { recover() }()

A sintaxe de Go que você mais usa, em uma única página. Esta folha de consulta Go é uma referência rápida para o núcleo da linguagem - variáveis e tipos, slices e maps, structs e interfaces, além das goroutines e channels que fazem o Golang brilhar em concorrência.

Tudo aqui é Go padrão e compila com a toolchain oficial. Copie o que precisar ou teste cada trecho ao vivo no playground de Go - sem necessidade de instalação.

Perguntas frequentes sobre a folha de consulta Go

Esta folha de consulta Go é gratuita?
Sim. Esta folha de consulta Go é totalmente gratuita, sem necessidade de cadastro. Salve nos favoritos e volte sempre que precisar consultar uma operação de slice, um padrão de channel ou um método de struct.
Qual é a diferença entre := e var em Go?
var x = 0 declara uma variável e funciona em qualquer lugar, inclusive no nível do pacote. x := 0 é a declaração curta de variável: ela declara e atribui, infere o tipo, e só pode ser usada dentro de uma função. Use var quando precisar de um tipo explícito ou de uma variável de nível de pacote, e := para declarações locais concisas.
O que são goroutines e channels?
Uma goroutine é uma thread leve gerenciada pelo runtime do Go - você inicia uma escrevendo go someFunc(). Channels são pipes tipados que permitem que goroutines se comuniquem com segurança: uma goroutine envia com ch <- v e outra recebe com <-ch. Juntos, eles formam o modelo de concorrência central do Go, resumido pelo lema "compartilhe memória comunicando-se".
Posso praticar Go online?
Sim. Abra o playground de Go para executar qualquer trecho desta folha de consulta no seu navegador - sem toolchain do Go para instalar. Quando quiser estrutura, o curso interativo e gratuito de Go da Coddy leva você passo a passo de variáveis e slices a goroutines e channels.
Esta folha de consulta é boa para iniciantes?
Sim. Ela está organizada dos tópicos mais comuns (variáveis, controle de fluxo, funções) até os avançados (goroutines, channels, tratamento de erros), de modo que você pode usar as seções de cima já no primeiro dia e ir avançando para o resto.
Coddy programming languages illustration

Aprenda Go com a Coddy

COMEÇAR