🚀 Aula 44 – Tutorial Golang – Ordenação Avançada por Funções Personalizadas

🚀 Aula 44 – Tutorial Golang – Ordenação Avançada por Funções Personalizadas

Tutorial Golang

Tutorial Golang

Página principal do blog

Todas as aulas desse curso

Aula 43                                Aula 45

Redes Sociais do Código Fluente:

facebook

 

 


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:

facebook

 


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:

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

PIX Nubank

PIX Nubank


🚀 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 que b, retorna um valor negativo.
  • Se a é mais severo que b, 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 tipo time.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 de b, a função retorna -1, indicando que a deve vir antes de
  • Se a duração da atividade a for maior que a de b, retorna 1, indicando que a deve vir depois de b.
  • Se as durações forem iguais, retorna 0, indicando que a ordem relativa de a e b 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 que a tem menos calorias que b e deve vir antes na ordenação.
  • Se for positivo, a tem mais calorias que b 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.

Até a próxima aula!

Aula 43                                Aula 45

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>