Menu
Coddy logo textTech

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 calculator

Dentro 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.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Crie 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 é:

  1. Criar um pacote mathutils declarando package mathutils no topo
  2. Analisar a primeira entrada dividindo-a por pipes (|) para obter as definições de funções individuais
  3. 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
  4. Criar as seguintes funções exportadas em seu pacote mathutils:
    • Add(a, b int) int - retorna a soma de a e b
    • Subtract(a, b int) int - retorna a menos b
    • Multiply(a, b int) int - retorna o produto de a e b
    • Divide(a, b int) int - retorna a dividido por b (divisão inteira)
  5. Em seu programa principal, importar o pacote mathutils
  6. Exibir o cabeçalho de informações do pacote: "=== MATHUTILS PACKAGE DEMO ==="
  7. 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"
  8. Analisar a segunda entrada dividindo-a por pipes para obter as solicitações de cálculo individuais
  9. Para cada solicitação de cálculo, dividir por dois pontos para obter o nome da função e os parâmetros
  10. Dividir os parâmetros por vírgulas para obter os dois valores inteiros
  11. Converter as strings dos parâmetros em inteiros usando strconv.Atoi
  12. Exibir o cabeçalho do processo de cálculo: "Performing calculations:"
  13. Para cada solicitação de cálculo:
    • Chamar a função apropriada do pacote mathutils
    • Exibir: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. 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]"
  15. 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 calculator

Apenas 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
}
quiz iconTeste seus conhecimentos

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