Criando um Pacote Simples
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 53 de 68.
Agora é hora de criar seu próprio pacote personalizado! Criar pacotes permite que você organize seu código em módulos reutilizáveis que podem ser importados e usados em diferentes programas.
Para criar um pacote, você começa declarando-o no topo do seu arquivo com a palavra-chave package seguida pelo nome do pacote. Para o nosso pacote de calculadora, usaremos:
package calculatorDentro deste pacote, você pode definir funções, variáveis e tipos. Lembre-se de que apenas identificadores exportados (aqueles que começam com uma letra maiúscula) estarão acessíveis a partir de outros pacotes. Veja como você pode definir uma função Add exportada:
package calculator
func Add(a, b int) int {
return a + b
}Para usar seu pacote personalizado de outro arquivo, você o importa como qualquer outro pacote. A partir do seu pacote main, você pode então chamar as funções exportadas:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Esta abordagem modular torna seu código mais organizado e permite que você reutilize funcionalidades em vários programas sem duplicar código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilCrie um pacote personalizado mathutils com operações matemáticas básicas e, em seguida, use-o em seu programa principal. Este desafio testará sua habilidade de criar um pacote, definir funções exportadas e importar seu pacote personalizado para uso em outro programa.
Você receberá duas entradas:
- Uma string contendo definições de função no formato
"function1:param1,param2:operation|function2:param1,param2:operation"(ex:"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction") - Uma string contendo solicitações de cálculo no formato
"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"(ex:"Add:15,25|Multiply:6,8|Subtract:50,20")
Sua tarefa é:
- Criar um pacote
mathutilsdeclarandopackage mathutilsno topo - Analisar a primeira entrada dividindo-a por pipes (
|) para obter as definições de funções individuais - Para cada definição de função, dividir por dois pontos para obter o nome da função, parâmetros e tipo de operação
- Criar as seguintes funções exportadas em seu pacote
mathutils:Add(a, b int) int- retorna a soma de a e bSubtract(a, b int) int- retorna a menos bMultiply(a, b int) int- retorna o produto de a e bDivide(a, b int) int- retorna a dividido por b (divisão inteira)
- Em seu programa principal, importar o pacote
mathutils - Exibir o cabeçalho de informações do pacote:
"=== MATHUTILS PACKAGE DEMO ===" - Analisar a primeira entrada e exibir as funções disponíveis:
"Available functions in mathutils package:"- Para cada função:
"- [function_name]: Performs [operation_type] on two integers"
- Analisar a segunda entrada dividindo-a por pipes para obter as solicitações de cálculo individuais
- Para cada solicitação de cálculo, dividir por dois pontos para obter o nome da função e os parâmetros
- Dividir os parâmetros por vírgulas para obter os dois valores inteiros
- Converter as strings dos parâmetros em inteiros usando
strconv.Atoi - Exibir o cabeçalho do processo de cálculo:
"Performing calculations:" - Para cada solicitação de cálculo:
- Chamar a função apropriada do pacote
mathutils - Exibir:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Chamar a função apropriada do pacote
- Calcular e exibir estatísticas de resumo:
"Calculation Summary:""Total calculations performed: [number_of_calculations]""Functions used: [comma_separated_list_of_unique_function_names_used]""Sum of all results: [sum_of_all_calculation_results]"
- Exibir a confirmação de uso do pacote:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
Use o pacote strings para dividir as strings de entrada, o pacote strconv para converter strings em inteiros e o pacote fmt para saída formatada. Lembre-se de que apenas funções que começam com letras maiúsculas serão exportadas e acessíveis a partir de outros pacotes.
Importante: Ambas as linhas de entrada usam pipes (|) como delimitador entre as entradas. Cada entrada na primeira entrada tem o formato FunctionName:param1,param2:operationtype — divida por | primeiro, depois divida cada entrada por : para extrair o nome da função (índice 0) e o tipo de operação (índice 2).
Este desafio demonstra como criar código reutilizável por meio de pacotes personalizados e como organizar a funcionalidade em módulos lógicos.
Folha de consulta
Para criar um pacote personalizado, declare-o no topo do seu arquivo com a palavra-chave package:
package calculatorApenas identificadores exportados (começando com uma letra maiúscula) são acessíveis a partir de outros pacotes:
package calculator
func Add(a, b int) int {
return a + b
}Importe e use seu pacote personalizado de outro arquivo:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Esta abordagem modular organiza o código e permite o reuso em múltiplos programas sem duplicar código.
Experimente você mesmo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Crie as funções do seu pacote mathutils aqui
// Como não podemos usar arquivos separados, defina as funções diretamente
// Estas normalmente estariam em um arquivo de pacote separado
func main() {
// Lê a entrada usando bufio.Scanner para lidar com espaços adequadamente
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Escreva seu código abaixo
// 1. Defina as funções Add, Subtract, Multiply, Divide (simulando o pacote mathutils)
// 2. Analise functionDefs: divida por '|' para obter cada definição, depois divida cada uma por ':'
// Formato: FuncName:param1,param2:operation (ex: "Add:5,3:addition")
// 3. Exiba as informações do pacote e as funções disponíveis
// 4. Analise calcRequests (divida por '|'), realize os cálculos
// 5. Exiba os resultados e as estatísticas de resumo
// Suprimir avisos de variáveis não utilizadas
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// Lembre-se de gerar a saída no formato exigido conforme especificado no desafio
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos6Go Idiomático: Conjuntos
O Idioma de Conjuntos em GoCriando um ConjuntoAdicionando a um ConjuntoVerificando a Existência de ElementosRemovendo de um ConjuntoIterando sobre um ConjuntoRecapitulação - Nomes de Usuário Únicos9Pacotes e Escopo
O que é um Pacote?Exportado vs Não ExportadoCriando um Pacote SimplesAliasing de PacotesO Identificador em Branco `_` A função `init`Recapitulação - Construindo um Utilitário