シンプルなパッケージの作成
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 53/68。
さあ、独自のカスタムパッケージを作成しましょう!パッケージを作成することで、コードを再利用可能なモジュールに整理し、さまざまなプログラムでインポートして使用できるようになります。
パッケージを作成するには、ファイルの先頭で package キーワードに続けてパッケージ名を宣言することから始めます。今回の計算機パッケージでは、次のように記述します。
package calculatorこのパッケージ内では、関数、変数、および型を定義できます。エクスポートされた識別子(大文字で始まるもの)のみが他のパッケージからアクセス可能であることに注意してください。エクスポートされた Add 関数を定義する方法は次のとおりです:
package calculator
func Add(a, b int) int {
return a + b
}別のファイルからカスタムパッケージを使用するには、他のパッケージと同じようにインポートします。main パッケージから、エクスポートされた関数を呼び出すことができます。
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}このモジュール化されたアプローチにより、コードがより整理され、コードを重複させることなく複数のプログラムで機能を再利用できるようになります。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単基本的な数学演算を行うカスタム mathutils パッケージを作成し、それをメインプログラムから使用してください。このチャレンジでは、パッケージの作成、エクスポートされた関数の定義、および別のプログラムで使用するためのカスタムパッケージのインポート能力をテストします。
2つの入力を受け取ります:
"function1:param1,param2:operation|function2:param1,param2:operation"という形式の関数定義を含む文字列(例:"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"という形式の計算リクエストを含む文字列(例:"Add:15,25|Multiply:6,8|Subtract:50,20")
あなたのタスクは以下の通りです:
- 冒頭で
package mathutilsを宣言してmathutilsパッケージを作成する - 最初の入力をパイプ (
|) で分割して、個々の関数定義を取得する - 各関数定義について、コロンで分割して関数名、パラメータ、および演算タイプを取得する
mathutilsパッケージ内に、以下のエクスポートされた関数を作成する: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パッケージをインポートする - パッケージ情報のヘッダーを表示する:
"=== MATHUTILS PACKAGE DEMO ===" - 最初の入力を解析し、利用可能な関数を表示する:
"Available functions in mathutils package:"- 各関数について:
"- [function_name]: Performs [operation_type] on two integers"
- 2番目の入力をパイプで分割して、個々の計算リクエストを取得する
- 各計算リクエストについて、コロンで分割して関数名とパラメータを取得する
- パラメータをカンマで分割して、2つの整数値を取得する
strconv.Atoiを使用してパラメータ文字列を整数に変換する- 計算プロセスのヘッダーを表示する:
"Performing calculations:" - 各計算リクエストについて:
mathutilsパッケージから適切な関数を呼び出す- 表示:
"mathutils.[function_name]([param1], [param2]) = [result]"
- 要約統計を計算して表示する:
"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]"
- パッケージ使用の確認を表示する:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
入力文字列の分割には strings パッケージを、文字列から整数への変換には strconv パッケージを、フォーマットされた出力には fmt パッケージを使用してください。大文字で始まる関数のみがエクスポートされ、他のパッケージからアクセス可能になることに注意してください。
重要: 両方の入力行は、エントリ間の区切り文字としてパイプ (|) を使用しています。最初の入力の各エントリは FunctionName:param1,param2:operationtype という形式です。まず | で分割し、次に各エントリを : で分割して関数名(インデックス 0)と演算タイプ(インデックス 2)を抽出してください。
このチャレンジは、カスタムパッケージを通じて再利用可能なコードを作成する方法と、機能を論理的なモジュールに整理する方法を示しています。
チートシート
カスタムパッケージを作成するには、ファイルの先頭で package キーワードを使用して宣言します:
package calculatorエクスポートされた識別子(大文字で始まるもの)のみが、他のパッケージからアクセス可能です:
package calculator
func Add(a, b int) int {
return a + b
}別のファイルからカスタムパッケージをインポートして使用します:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}このモジュール化されたアプローチにより、コードが整理され、コードを重複させることなく複数のプログラムで再利用できるようになります。
自分で試してみよう
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: ここに mathutils パッケージの関数を作成してください
// 個別のファイルを使用できないため、関数を直接定義します
// これらは通常、別のパッケージファイルに配置されます
func main() {
// スペースを適切に処理するために bufio.Scanner を使用して入力を読み取ります
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: 以下にコードを記述してください
// 1. Add、Subtract、Multiply、Divide 関数を定義します (mathutils パッケージをシミュレート)
// 2. functionDefs を解析します: '|' で分割して各定義を取得し、さらに各定義を ':' で分割します
// 形式: 関数名:パラメータ1,パラメータ2:操作 (例: "Add:5,3:addition")
// 3. パッケージ情報と利用可能な関数を表示します
// 4. calcRequests を解析し ('|' で分割)、計算を実行します
// 5. 結果と要約統計を表示します
// 未使用変数の警告を抑制します
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// チャレンジで指定された必要な形式で出力することを忘れないでください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。