Golang
Que abordagens podem ser usadas para garantir a segurança de threads ao trabalhar com slices em um ambiente multithread?
Quais operações são permitidas ao trabalhar com um slice nil na linguagem de programação?
Que metodologias de projeto de sistemas preferes ao criar soluções?
Fale sobre uma tarefa difícil que conseguiu resolver escrevendo um script para o sistema Linux
Como é que se pode regular o volume de dados armazenados em cache?
Disposição para atuar como o único especialista Backend na equipa
Qual é a principal razão para usar o tipo sync.Map em Go?
Quais são as boas práticas e antipadrões nos testes unitários? Como saber se os testes são bons?
func Exclude(a, b []int) []int { set := make(map[int]struct{}) for _, v := range b { set[v] = struct{}{} } result := make([]int, 0) for _, v := range a { if _, ok := set[v]; !ok { result = append(result, v) } } return result } Erro de compilação # command-line-arguments ./main.go:39:32: erro de sintaxe: nova linha inesperada, esperado { após a cláusula if
Já teve dificuldades ao implementar interações entre diferentes serviços?
Como é que a passagem de um segmento (slice) é feita numa função numa linguagem de programação?
O que é o padrão Saga?
Por que não usaram Testcontainers?
/* Precisamos transferir dados de uma fonte para um consumidor. A fonte fornece os dados em pequenos lotes (~dez registros), enquanto o consumidor funciona de forma mais eficiente com lotes maiores. Um exemplo real é a transferência de dados de filas do tipo Kafka para o banco de dados Clickhouse. Fonte: - Praticamente infinita. - A fonte nunca retorna mais de MaxItems registros em uma única chamada a Next. - Dentro de uma "sessão" (uma chamada à função Pipe), a fonte retorna novos dados a cada chamada a Next. - No entanto, após reiniciar, a fonte começará da posição "confirmada" anterior, indicada por cookie. Portanto, *cada* valor de cookie retornado por Next, após salvar os dados no receptor, deve ser confirmado com uma chamada a Commit, na mesma ordem em que foram retornados por Next. Receptor: - Não pode processar mais de MaxItems de uma vez. Nível básico: É necessário implementar a função func Pipe(p Producer, c Consumer) error que lê dados da fonte, os agrupa em um buffer de tamanho não maior que MaxItems e os salva no receptor, e depois confirma o progresso na fonte. */ const MaxItems = 9999 type Producer interface { // Next retorna: // - lote de itens a serem processados // - cookie para ser confirmado quando o processamento estiver concluído // - erro Next() (items []any, cookie int, err error) // Commit é usado para marcar o lote de dados como processado Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
Uma tabela com (id PRIMARY KEY, data JSON) — um índice PostgreSQL é bastante bom para procurar por chave?
Qual é a diferença entre virtualização e conteinerização?
É possível inserir outro bloco de código com chaves dentro de uma função existente?
Como é que definiu e formulou as tarefas na sua posição anterior?
Como foi implementado o código final no ambiente de produção no seu último projeto?
Como funciona a operação de adicionar um novo elemento a uma slice numa linguagem de programação?