Como passar em uma entrevista de Go: principais perguntas de A a Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como passar em uma entrevista de Go: principais perguntas de A a Z



A entrevista para a posição de desenvolvedor Go não é apenas uma verificação de sintaxe. Os empregadores procuram candidatos que entendam a filosofia da linguagem: simplicidade, concorrência e gerenciamento eficiente de memória. Neste artigo, vamos analisar as principais perguntas que você certamente receberá — desde o básico até tópicos avançados com exemplos de código. Prepare-se com nossa lista de verificação e você se sentirá confiante.



1. Fundamentos do Go: tipos de dados, estruturas e gerenciamento de memória



Vamos começar com o básico. Sem ele, não há como ir adiante. Os entrevistadores adoram fazer perguntas sobre tipos e seus comportamentos.



Quais são os tipos de dados embutidos em Go?

  • Básicos: int, float64, string, bool.
  • Agregados: array, struct.
  • Referência: slice, map, channel, pointer, function.


Qual a diferença entre array e slice?

O array tem um tamanho fixo, definido em tempo de compilação. O slice é uma estrutura dinâmica que faz referência a um array subjacente.

// Arrayvar arr [3]int = [3]int{1, 2, 3}arr[0] = 10 // Ok

// Sliceslc := []int{1, 2, 3}slc = append(slc, 4) // O tamanho pode crescer

Pergunta capciosa: O que acontece com a memória durante append, se a capacidade do slice for excedida? (Resposta: Go aloca um novo array 2 vezes maior e copia os dados).



Como funciona um map em Go?

Map é uma tabela hash. A ordem de iteração não é garantida. Ao ler uma chave inexistente, retorna o valor zero (por exemplo, 0 para int).

m := make(map[string]int)m["chave"] = 42valor, ok := m["chave"] // ok == true, se a chave existir


2. Concorrência: goroutines, canais e mutexes

Este é o tópico mais importante para Go. Sem ele, você não passa na entrevista.



O que é uma goroutine e qual a diferença para uma thread do SO?

Uma goroutine é uma thread leve, gerenciada pelo runtime do Go. A pilha da goroutine começa com 2-4 KB (contra 1 MB de uma thread do SO). Milhares de goroutines rodam em algumas threads do SO (modelo M:N).



Como funcionam os canais? Dê um exemplo do padrão worker pool.

func worker(id int, jobs <-chan int, results chan<- int) {    for j := range jobs {        results <- j * 2    }}

func main() { jobs := make(chan int, 100) results := make(chan int, 100)

// Iniciamos 3 workers for w := 1; w <= 3; w++ { go worker(w, jobs, results) }

// Enviamos tarefas for j := 1; j <= 5; j++ { jobs <- j } close(jobs)

// Coletamos os resultados for r := 1; r <= 5; r++ { <-results }}


Qual a diferença entre um canal bufferizado e não bufferizado?

  • Não bufferizado: o remetente bloqueia até que o destinatário receba a mensagem. Comunicação síncrona.
  • Bufferizado: o remetente bloqueia apenas quando o buffer está cheio. Comunicação assíncrona.


Como evitar deadlock?

Use select com timeout ou default:

select {case msg := <-ch:    fmt.Println(msg)case <-time.After(1 * time.Second):    fmt.Println("timeout")}


3. Interfaces, genéricos e tratamento de erros

Go não é uma linguagem puramente OOP, mas as interfaces desempenham um papel fundamental aqui.



Como funciona a tipagem pato (duck typing) em Go?

Um tipo implementa uma interface implicitamente se tiver todos os métodos necessários. Isso permite escrever código flexível.

type Stringer interface {    String() string}

type User struct { Name string}

func (u User) Str

Blogs

Book Recommendations