シンプルなパッケージの作成
CoddyのGOジャーニー「論理とフロー」セクションの一部。レッスン 53/68。
それでは、独自のカスタムパッケージを作成しましょう!パッケージを作成すると、コードを再利用可能なモジュールに整理し、さまざまなプログラムでインポートして使用できるようになります。
パッケージを作成するには、まずファイルの先頭で、packageキーワードの後にパッケージ名を続けて宣言します。calculator パッケージには、次を使用します。
package calculatorこのパッケージ内では、function、変数、型を定義できます。他のパッケージからアクセスできるのは、エクスポートされた識別子(大文字で始まるもの)だけであることを覚えておいてください。エクスポートされた Add function は、次のように定義できます。
package calculator
func Add(a, b int) int {
return a + b
}別のファイルからカスタムパッケージを使用するには、他のパッケージと同じように import します。mainパッケージから、エクスポートされた functions を呼び出せます。
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}このモジュール化されたアプローチにより、コードがより整理され、コードを重複させることなく、複数のプログラム間で機能を再利用できます。
チャレンジ
簡単カスタム mathutils パッケージを作成し、基本的な数学演算を実装してから、メインプログラムで使用してください。この challenge では、パッケージの作成、エクスポートされた functions の define、別のプログラムで使用するためのカスタムパッケージの import の能力が試されます。
次の2つの入力を受け取ります。
- 次の形式の function definitions を含む文字列
"function1:param1,param2:operation|function2:param1,param2:operation"(例:"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction") - 次の形式の calculation requests を含む文字列
"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"(例:"Add:15,25|Multiply:6,8|Subtract:50,20")
あなたの task は次のとおりです。
- 先頭で
package mathutilsを宣言してmathutilsパッケージを Create する - 最初の入力をパイプ(
|)で分割し、個々の function definitions を取得する - 各 function definition をコロンで分割し、function name、parameters、operation type を取得する
mathutilsパッケージに次の exported functions を Create する:Add(a, b int) int- a と b の合計を返すSubtract(a, b int) int- a から b を引いた値を返すMultiply(a, b int) int- a と b の積を返すDivide(a, b int) int- a を b で割った値を返す(整数除算)
- メインプログラムで
mathutilsパッケージを import する - パッケージ information header を display する:
"=== MATHUTILS PACKAGE DEMO ===" - 最初の入力を Parse し、available functions を display する:
"Available functions in mathutils package:"- 各 function について:
"- [function_name]: Performs [operation_type] on two integers"
- 2番目の入力をパイプで分割し、個々の calculation requests を取得する
- 各 calculation request をコロンで分割し、function name と parameters を取得する
- parameters をコンマで分割し、2つの整数値を取得する
strconv.Atoiを使用して parameter strings を整数に変換する- calculation process header を display する:
"Performing calculations:" - 各 calculation request について:
mathutilsパッケージから適切な function を呼び出す- 次を display する:
"mathutils.[function_name]([param1], [param2]) = [result]"
- summary statistics を計算して display する:
"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]"
- パッケージ usage confirmation を display する:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
入力文字列を分割するには strings パッケージを、文字列を整数に変換するには strconv パッケージを、formatted output には fmt パッケージを使用してください。大文字で始まる functions だけが exported され、他のパッケージからアクセス可能になることを覚えておいてください。
重要:両方の入力行では、エントリ間の delimiter としてパイプ(|)を使用します。最初の入力の各エントリは FunctionName:param1,param2:operationtype という形式です。まず | で split し、その後、各エントリを : で split して function name(index 0)と operation type(index 2)を抽出します。
この challenge は、カスタムパッケージを通じて再利用可能な code を作成する方法と、機能を論理的な modules に整理する方法を示します。
自分で試してみよう
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Create your mathutils package functions here
// 別ファイルを使用できないため、関数を直接定義する
// これらは通常、別のパッケージファイルにあります
func main() {
// スペースを適切に処理するために bufio.Scanner を使用して入力を読み取る
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: 以下にコードを書いてください
// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
// 2. functionDefs を解析する: '|' で分割して各定義を取得し、それぞれを ':' で分割する
// 形式: FuncName:param1,param2:operation (例: "Add:5,3:addition")
// 3. Display package information and available functions
// 4. Parse calcRequests (split by '|'), perform calculations
// 5. 結果と要約統計を表示する
// 未使用変数の警告を抑制する
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// チャレンジで指定された必要な形式で出力することを忘れないでください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: Goオンラインコンパイラ