Sobes.tech
Junior — Middle

Que arquitetura de servidor é aplicada nos teus projetos?

sobes.tech IA

Resposta da IA

Nos projetos em Go, geralmente, aplica-se uma arquitetura de microserviços ou uma arquitetura monolítica modular, dependendo da escala e dos requisitos.

Princípios principais:

  • Separação clara de responsabilidades entre componentes.
  • Uso de REST ou gRPC para interação entre serviços.
  • Injeção de dependências para facilitar testes e extensibilidade.
  • Uso do contexto (context.Context) para gerir o ciclo de vida das requisições e cancelar operações.

Exemplo de uma arquitetura simples de servidor em Go:

package main

import (
    "context"
    "net/http"
)

// Serviço com lógica de negócio
type UserService struct {}

func (s *UserService) GetUser(ctx context.Context, id string) (string, error) {
    // lógica para obter um usuário
    return "Utilizador " + id, nil
}

// Manipulador HTTP
func userHandler(s *UserService) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        id := r.URL.Query().Get("id")
        user, err := s.GetUser(r.Context(), id)
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        w.Write([]byte(user))
    }
}

func main() {
    userService := &UserService{}
    http.HandleFunc("/user", userHandler(userService))
    http.ListenAndServe(":8080", nil)
}

Este método permite escalar e manter facilmente a parte do servidor.