Encerrar um servidor Go de forma ordenada é um projeto prático sobre fechar um serviço de downloads sem abandonar o trabalho em andamento. Comece baixando um documento de texto completo, observe como uma parada imediata interrompe uma transferência aceita e implemente uma coordenação que recuse novas conexões enquanto os downloads existentes terminam no processo servidor original.
Dois laboratórios guiados relacionam os resultados reais do cliente à identidade do processo, à entrega de sinais, ao encerramento HTTP e à responsabilidade de espera de main. Um desafio independente aplica os mesmos mecanismos a duas transferências aceitas de documentos diferentes. Cada unidade fornece seu próprio ambiente e materiais. Reserve cerca de 150 minutos, uma estimativa do autor que inclui leitura e correções comuns.
O que você aprenderá
Ao concluir o curso, você poderá:
- comparar um download completo e útil com uma transferência interrompida pelos bytes reais dos documentos;
- identificar o processo Go compilado original do curso e enviar um
SIGTERMprecisamente para ele; - estabelecer que as requisições foram aceitas antes da parada e observar novas conexões recusadas enquanto o trabalho existente continua;
- usar
http.Server.Shutdowncom um orçamento de contexto finito para permitir a conclusão de requisições HTTP comuns ativas; - distinguir
http.ErrServerClosedde erros reais do servidor e manter main aguardando a conclusão do encerramento; - preservar um ou dois documentos completos baixados, verificar os resultados dos clientes e servidor originais e manter os arquivos e observações fornecidos.
Para quem é este curso
Este curso é indicado para estudantes de Go prontos para coordenar o ciclo de vida de um pequeno serviço HTTP e suas requisições ativas.
Pré-requisitos: Navegação básica no terminal, manipuladores e valores de erro de Go de Criar uma API de achados e perdidos, além de goroutines e canais de Verificar sites com workers de Go, ou experiência equivalente. IDs de processo, sinais, contextos finitos e a espera de main durante o encerramento são explicados antes do uso.
Ambiente de aprendizagem: A LabEx fornece Go, código inicial do ciclo de vida, um manipulador HTTP preparado, dois documentos de texto reais e ferramentas de observação em um ambiente de terminais no navegador. Use os terminais Server e Downloads na mesma máquina para executar o serviço e seus clientes sem instalar Go localmente. Os comandos, rótulos e a saída do programa permanecem em inglês.
Perguntas frequentes
Preciso conhecer sinais do sistema operacional previamente?
Não. Os laboratórios apresentam a identidade do processo e SIGTERM antes de pedir que você pare o servidor do curso. Os observadores preparados ajudam a identificar requisições aceitas e resultados nativos dos processos; aprender seu formato interno de rastreamento não é necessário.
Chamar Shutdown termina tudo automaticamente?
Main deve aguardar a conclusão do encerramento. Um erro por prazo excedido não prova que o trabalho ativo terminou. O processamento do servidor pode acabar antes de o cliente concluir a leitura ou a gravação dos dados em buffer no arquivo baixado. Por isso, você examina ambos os resultados sem presumir uma ordem entre as mensagens dos terminais.
O que muda no desafio?
Dois documentos diferentes devem estar em transferência quando você para o servidor original. Ambos os downloads devem manter seus bytes exatos, novas conexões devem ser recusadas durante o trabalho ativo e o mesmo servidor deve sair normalmente. O escopo é HTTP comum; WebSockets, troca de tráfego distribuído e garantias de produção sem interrupções ficam fora deste projeto.

