🚀 Aula 44 – Tutorial Golang – Ordenação Avançada por Funções Personalizadas
🚀 Aula 44 – Tutorial Golang – Ordenação Avançada por Funções Personalizadas
Página principal do blog
Todas as aulas desse curso
Aula 43 Aula 45
Redes Sociais do Código Fluente:
Scarlett Finch
Scarlett Finch é uma influenciadora virtual criada com IA.
Ela é 🎤 cantora e 🎶compositora pop britânica , 24 anos de idade, adora o Brasil e em especial o Rio de Janeiro.
Siga a Scarlett Finch no Instagram:
Conecte-se comigo!
LinkedIn: Fique à vontade para me adicionar no LinkedIn.
Ao conectar-se comigo, você terá acesso a atualizações regulares sobre desenvolvimento web, insights profissionais e oportunidades de networking no setor de tecnologia.
GitHub: Siga-me no GitHub para ficar por dentro dos meus projetos mais recentes, colaborar em código aberto ou simplesmente explorar os repositórios que eu contribuo, o que pode ajudar você a aprender mais sobre programação e desenvolvimento de software.
Recursos e Afiliados
Explorando os recursos abaixo, você ajuda a apoiar nosso site.
Somos parceiros afiliados das seguintes plataformas:
- https://heygen.com/ – Eleve a produção de seus vídeos com HeyGen! Com esta plataforma inovadora, você pode criar vídeos envolventes utilizando avatares personalizados, ideal para quem busca impactar e conectar com audiências em todo o mundo. HeyGen transforma a maneira como você cria conteúdo, oferecendo ferramentas fáceis de usar para produzir vídeos educativos, demonstrações de produtos e muito mais. Descubra o poder de comunicar através de avatares interativos e traga uma nova dimensão para seus projetos. Experimente HeyGen agora e revolucione sua forma de criar vídeos!
- letsrecast.ai – Redefina a maneira como você consome artigos com Recast. Esta plataforma transforma artigos longos em diálogos de áudio que são informativos, divertidos e fáceis de entender. Ideal para quem está sempre em movimento ou busca uma forma mais conveniente de se manter informado. Experimente Recast agora.
- dupdub.com – Explore o universo do marketing digital com DupDub. Esta plataforma oferece ferramentas inovadoras e soluções personalizadas para elevar a sua estratégia de marketing online. Ideal para empresas que buscam aumentar sua visibilidade e eficiência em campanhas digitais. Descubra mais sobre DupDub.
- DeepBrain AI Studios – Revolucione a criação de conteúdo com a tecnologia de inteligência artificial da DeepBrain AI Studios. Esta plataforma avançada permite que você crie vídeos interativos e apresentações utilizando avatares digitais gerados por IA, que podem simular conversas reais e interações humanas. Perfeito para educadores, criadores de conteúdo e empresas que querem inovar em suas comunicações digitais. Explore DeepBrain AI Studios.
- Audyo.ai – Transforme a maneira como você interage com conteúdo auditivo com Audyo.ai. Esta plataforma inovadora utiliza inteligência artificial para criar experiências de áudio personalizadas, melhorando a acessibilidade e a compreensão de informações através de podcasts, transcrições automáticas e síntese de voz avançada. Ideal para profissionais de mídia, educadores e qualquer pessoa que deseje acessar informações auditivas de maneira mais eficiente e envolvente. Descubra Audyo.ai e suas possibilidades.
- Acoust.io – Transforme sua produção de áudio com Acoust.io. Esta plataforma inovadora fornece uma suite completa de ferramentas para criação, edição e distribuição de áudio, ideal para artistas, produtores e empresas de mídia em busca de excelência e inovação sonora. Acoust.io simplifica o processo de levar suas ideias à realidade, oferecendo soluções de alta qualidade que elevam seus projetos de áudio. Experimente Acoust.io agora e descubra um novo patamar de possibilidades para seu conteúdo sonoro.
- Hostinger – Hospedagem web acessível e confiável. Ideal para quem busca soluções de hospedagem de sites com excelente custo-benefício e suporte ao cliente robusto. Saiba mais sobre a Hostinger.
- Digital Ocean – Infraestrutura de nuvem para desenvolvedores. Oferece uma plataforma de nuvem confiável e escalável projetada especificamente para desenvolvedores que precisam de servidores virtuais, armazenamento e networking. Explore a Digital Ocean.
- One.com – Soluções simples e poderosas para o seu site. Uma escolha ideal para quem busca registrar domínios, hospedar sites ou criar presença online com facilidade e eficiência. Visite One.com.
Educação e Networking
Amplie suas habilidades e sua rede participando de cursos gratuitos e comunidades de desenvolvedores:
- Digital Innovation One – Cursos gratuitos com certificado.
- Workover – Aprenda Python3 gratuitamente.
- Comunidades de desenvolvedores para networking:
Canais do Youtube
Explore nossos canais no YouTube para uma variedade de conteúdos educativos e de entretenimento, cada um com um foco único para enriquecer sua experiência de aprendizado e lazer.
Toti
Toti: Meu canal pessoal, onde posto clips artesanais de músicas que curto tocar, dicas de teoria musical, entre outras coisas.
Lofi Music Zone Beats
Lofi Music Zone Beats: O melhor da música Lofi para estudo, trabalho e relaxamento, criando o ambiente perfeito para sua concentração.
Backing Track / Play-Along
Backing Track / Play-Along: Acompanhe faixas instrumentais para prática musical, ideal para músicos que desejam aprimorar suas habilidades.
Código Fluente
Código Fluente: Aulas gratuitas de programação, devops, IA, entre outras coisas.
Putz!
Putz!: Canal da banda Putz!, uma banda virtual, criada durante a pandemia com mais 3 amigos, Fábio, Tatá e Lula.
Scarlett Finch
Scarlett Finch: Cantora e influenciadora criada com IA.
PIX para doações
🚀 Aula 44 – Tutorial Golang – Ordenação Avançada por Funções Personalizadas
Código da aula: Github
Introdução
Na Aula 43, exploramos os conceitos básicos de ordenação em Go, utilizando o pacote sort e a implementação da interface sort.Interface.
Aprendemos como ordenar slices de tipos comuns como números inteiros, strings e structs personalizadas, utilizando funções pré-definidas e personalizadas do pacote sort.
Nesta aula, vamos expandir esses conceitos, mergulhando mais profundamente na ordenação customizada em Go.
Utilizaremos o pacote slices para aplicar funções de comparação personalizadas que atendem a requisitos específicos, permitindo a ordenação de estruturas mais complexas e tipos de dados que não são inerentemente ordenáveis pela sua natureza.
Vamos explorar casos de uso mais avançados e específicos, como a ordenação de logs por nível de severidade, atividades por duração e itens de menu por calorias.
Ordenação de Logs por Nível de Severidade
Logs de sistemas podem ter vários níveis de severidade, como INFO, WARN, e ERROR. Podemos querer ordenar esses logs para processar ou exibir primeiro os mais críticos.
package main
import (
"fmt"
"slices"
)
type LogEntry struct {
timestamp string
severity string
message string
}
// Definindo uma ordem de severidade
var severityOrder = map[string]int{
"INFO": 1,
"WARN": 2,
"ERROR": 3,
}
func main() {
logs := []LogEntry{
{"2024-01-10 14:00", "INFO", "System started"},
{"2024-01-10 14:01", "ERROR", "Failed to load module"},
{"2024-01-10 14:02", "WARN", "Memory usage high"},
}
severityCmp := func(a, b LogEntry) int {
return severityOrder[a.severity] - severityOrder[b.severity]
}
slices.SortFunc(logs, severityCmp)
fmt.Println("Logs sorted by severity:", logs)
}
LogEntry
: É uma struct que representa uma entrada de log, contendo:
timestamp
: A data e hora em que o log foi registrado.severity
: O nível de severidade do log (ex.: INFO, WARN, ERROR).message
: A mensagem do log.
severityOrder
: É um mapa que define uma ordem numérica para cada nível de severidade, sendo útil para comparar e ordenar os logs baseado em sua severidade.
logs
: É um slice que contém várias instâncias da struct LogEntry
, representando diferentes entradas de log.
severityCmp
: É uma função de comparação. Ela recebe dois argumentos a
e b
do tipo LogEntry
e retorna um inteiro. A função compara os logs a
e b
com base nos valores de seus níveis de severidade conforme definido no mapa severityOrder
.
- Se
a
é menos severo queb
, retorna um valor negativo. - Se
a
é mais severo queb
, retorna um valor positivo. - Se são igualmente severos, retorna zero.
slices.SortFunc(logs, severityCmp)
: Esta linha chama a função SortFunc do pacote slices, passando o slice logs e a função de comparação severityCmp como argumentos. SortFunc ordena o slice logs in-place (modifica o próprio slice) de acordo com a ordem de severidade definida.
fmt.Println
: Imprime o slice de logs ordenado por severidade.
Ordenação de Atividades por Duração
Em um aplicativo de gerenciamento de tempo, podemos querer ordenar atividades por duração para identificar as que consomem mais tempo.
package main
import (
"fmt"
"slices"
"time"
)
type Activity struct {
name string
duration time.Duration
}
func main() {
activities := []Activity{
{"Read email", 15 * time.Minute},
{"Meeting", 2 * time.Hour},
{"Code review", 45 * time.Minute},
}
durationCmp := func(a, b Activity) int {
if a.duration < b.duration { return -1 } else if a.duration > b.duration {
return 1
}
return 0
}
slices.SortFunc(activities, durationCmp)
fmt.Println("Activities sorted by duration:", activities)
}
Activity
: Uma struct que representa uma atividade, contendo:
name
: O nome da atividade.duration
: A duração da atividade, armazenada como uma variável do tipotime.Duration
, que é uma representação de duração em nanosegundos.
activities
: Um slice que contém instâncias da struct Activity
, representando diferentes atividades com suas respectivas durações.
durationCmp
: Uma função de comparação que define como as atividades serão ordenadas com base em sua duração.
- Se a duração da atividade
a
for menor que a deb
, a função retorna-1
, indicando quea
deve vir antes de - Se a duração da atividade
a
for maior que a deb
, retorna1
, indicando quea
deve vir depois deb
. - Se as durações forem iguais, retorna
0
, indicando que a ordem relativa dea
eb
pode ser qualquer.
slices.SortFunc(activities, durationCmp)
: Esta chamada usa a função SortFunc
do pacote slices
, passando o slice activities
e a função de comparação durationCmp
como argumentos. SortFunc
ordena o slice activities
in-place (modifica o próprio slice) conforme definido pela função durationCmp
.
fmt.Println
: Imprime o slice de atividades ordenadas por duração.
Ordenação de Itens de Menu por Calorias
Em um app de nutrição, a ordenação de itens de menu por calorias pode ajudar os usuários a escolher alimentos mais saudáveis.
package main
import (
"fmt"
"slices"
)
type MenuItem struct {
name string
calories int
}
func main() {
menu := []MenuItem{
{"Salad", 200},
{"Cheeseburger", 700},
{"Smoothie", 300},
}
caloriesCmp := func(a, b MenuItem) int {
return a.calories - b.calories
}
slices.SortFunc(menu, caloriesCmp)
fmt.Println("Menu items sorted by calories:", menu)
}
MenuItem
: Uma struct que representa um item de menu, contendo:
name
: O nome do item de menu.calories
: A quantidade de calorias que o item contém.
menu
: Um slice de MenuItem
, que contém três itens de menu diferentes com suas respectivas calorias.
caloriesCmp
: Uma função de comparação definida para comparar dois itens de menu com base em suas calorias.
- Se o resultado da subtração
a.calories - b.calories
for negativo, indica quea
tem menos calorias queb
e deve vir antes na ordenação. - Se for positivo,
a
tem mais calorias queb
e deve vir depois. - Se for zero, significa que ambos os itens têm igual quantidade de calorias e sua ordem relativa na lista pode permanecer a mesma.
slices.SortFunc(menu, caloriesCmp)
: Utiliza a função SortFunc
do pacote slices
para ordenar o slice menu
in-place (modificando o próprio slice) de acordo com a função de comparação caloriesCmp
.
fmt.Println
: Imprime o resultado final do slice menu
após a ordenação, mostrando os itens de menu ordenados por sua quantidade de calorias.
Conclusão
Nesta aula, exploramos diferentes maneiras de aplicar funções de comparação personalizadas para ordenar tipos de dados complexos e específicos.
Esses exemplos mostram como a ordenação customizada pode ser utilizada em aplicações do mundo real, aumentando a eficiência e a utilidade dos dados.
Vimos como ordenar logs por nível de severidade, atividades por duração e itens de menu por calorias, demonstrando a versatilidade e o poder das funções personalizadas no Go.
Lembre-se de explorar mais sobre as funções de comparação e continuar praticando para dominar a ordenação em seus projetos Go!
Na próxima aula, vamos mudar um pouco o foco para um tópico fundamental no tratamento de erros em Go: o uso da função panic
.
Veremos como e quando utilizar panic
para falhas que não podem ser tratadas de maneira convencional e como isso se aplica ao design robusto de programas em Go.