Recapitulação - Estruturas de Dados Personalizadas
Parte da seção Fundamentos do Journey de GO da Coddy — lição 101 de 109.
Desafio
FácilVamos criar uma estrutura de dados personalizada simples para recapitular o que aprendemos sobre structs em Go.
Neste desafio, você criará uma estrutura de dados Counter básica que pode:
- Rastrear um valor de contagem
- Incrementar a contagem
- Decrementar a contagem
- Redefinir a contagem para zero
Complete o código implementando os métodos que faltam para a struct Counter.
Experimente você mesmo
package main
import (
"fmt"
)
// Counter é uma estrutura de dados simples de contador
type Counter struct {
value int
name string
}
// NewCounter cria um novo contador com um nome fornecido
func NewCounter(name string) Counter {
return Counter{
value: 0,
name: name,
}
}
// Increment aumenta o contador em 1
func (c *Counter) Increment() {
// Adicione o código para incrementar o valor do contador
}
// Decrement diminui o contador em 1 (mas não abaixo de 0)
func (c *Counter) Decrement() {
// Adicione o código para decrementar o valor do contador
// Certifique-se de que o valor não fique abaixo de 0
}
// Reset redefine o contador de volta para 0
func (c *Counter) Reset() {
// Adicione o código para redefinir o contador para 0
}
// Value retorna a contagem atual
func (c Counter) Value() int {
// Adicione o código para retornar o valor atual
return 0 // Substitua isso
}
// String retorna uma representação em string do contador
func (c Counter) String() string {
return fmt.Sprintf("%s: %d", c.name, c.value)
}
func main() {
// Cria um novo contador chamado "Visitors"
visitors := NewCounter("Visitors")
// Incrementa o contador algumas vezes
visitors.Increment()
visitors.Increment()
visitors.Increment()
// Imprime a contagem atual
fmt.Println(visitors)
fmt.Println("Current value:", visitors.Value())
// Decrementa o contador
visitors.Decrement()
fmt.Println(visitors)
// Redefine o contador
visitors.Reset()
fmt.Println(visitors)
// Testa se o contador não fica abaixo de zero
visitors.Decrement()
fmt.Println(visitors)
}Todas as lições de Fundamentos
4Operadores de Comparação e Lógicos
Operadores de Comparação - Parte 1Operadores de Comparação - Parte 2Operador Lógico ANDOperador Lógico OROperador Lógico NOTFundamentos de Precedência de OperadoresRecapitulação - Fazendo Comparações7Fluxo de Controle: Loops
O Loop `for` ExplicadoLoop For - BásicoLoop For - Apenas CondiçãoA Palavra-chave `break`A Palavra-chave `continue`Loops AninhadosRecapitulação - Repetindo Ações10Tipos Compostos: Arrays
Introdução a ArraysDeclarando ArraysInicializando ArraysAcessando Elementos de um ArrayTamanho do Array com `len`Iterando sobre ArraysArrays Multidimensionais13Tipos Compostos: Structs
Definindo Tipos PersonalizadosCriando Instâncias de StructsAcessando Campos de StructsPonteiros para StructsInicializando StructsStructs IncorporadasStructs AnônimasRecapitulação - Estruturas de Dados Personalizadas2Variáveis e Tipos de Dados Básicos
O que é uma variávelInferência de Tipo com `:=`Inteiros (int)Números de Ponto FlutuanteBooleanosStringsValores ZeroConstantesConvenções de NomenclaturaRecapitulação - Variáveis e Tipos5Entrada/Saída Básica
Saída FormatadaVerbos de FormataçãoImprimindo TiposObtendo Entrada Básica do UsuárioRecapitulação - Entrada e Saída8Funções
Entendendo FunçõesDeclarando uma FunçãoChamando FunçõesParâmetros de FunçãoRetornando um Único ValorRetornando Múltiplos ValoresValores de Retorno NomeadosFundamentos de Escopo de FunçãoRecapitulação - Criando Código Reutilizável3Operadores Básicos
Operadores AritméticosOperador de DivisãoO Operador MóduloOperador de AtribuiçãoOperadores de Atribuição CompostaIncremento e DecrementoRecapitulação - Cálculos6Fluxo de Controle: Condicionais
A Instrução `if`A Palavra-chave `else`A Palavra-chave `else if`Sombreamento de Variáveis no `if`Inicializando VariáveisA Instrução `switch`Switch com ExpressõesSwitch sem ExpressãoA Palavra-chave `fallthrough`Recapitulação - Tomando Decisões