ūüöÄ 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>