まとめ:ユーティリティの作成
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 57/68。
チャレンジ
簡単文字列操作関数を備えた包括的な stringutil パッケージを作成し、メインプログラムでその使用法を実演してください。このチャレンジでは、カスタムユーティリティパッケージを作成し、エクスポートされた関数を実装し、別のプログラムからそのパッケージを使用する能力が試されます。
2つの入力を受け取ります:
"function1:description1,function2:description2"という形式の関数仕様を含む文字列(例:"Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")"string1|string2|string3"という形式でパイプで区切られたテスト文字列を含む文字列(例:"hello|Go Programming|WORLD")
あなたのタスクは以下の通りです:
package stringutilを宣言してstringutilパッケージを作成する- 最初の入力をカンマで分割して、個々の関数仕様を取得する
- 各関数仕様について、コロンで分割して関数名と説明を取得する
stringutilパッケージに以下のエクスポートされた関数を実装する:Reverse(s string) string- 文字を逆順にした文字列を返すToUpper(s string) string- 大文字に変換された文字列を返すToLower(s string) string- 小文字に変換された文字列を返すLength(s string) int- 文字列の長さを返す
- メインプログラムで
stringutilパッケージをインポートする - パッケージヘッダーを表示する:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - 利用可能な関数を表示する:
"Available functions in stringutil package:"- 最初の入力の各関数について:
"- [function_name]: [description]"
- 2番目の入力をパイプで分割して、個々のテスト文字列を取得する
- テストヘッダーを表示する:
"Testing stringutil functions:" - 各テスト文字列について、すべての関数を実演する:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- 統計を計算して表示する:
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- 最も長い文字列と最も短い文字列を表示する:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- 完了メッセージを表示する:
"Package demonstration completed successfully"
入力文字列の分割やテキストの操作には strings パッケージを、フォーマットされた出力には fmt パッケージを使用してください。Reverse 関数については、文字列をルーン(rune)のスライスに変換し、順序を反転させてから、文字列に戻す必要があります。他のパッケージからアクセスできるように、すべてのエクスポートされた関数は大文字で始める必要があることに注意してください。このチャレンジは、再利用可能なユーティリティパッケージを作成し、関連する機能をまとめて整理する方法を示しています。
自分で試してみよう
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: ここにstringutilパッケージの関数を作成してください
// 別ファイルを使用できないため、関数を直接定義します
// これらは通常、別のパッケージファイルに記述されます
// func Reverse(s string) string {
// // runeに変換し、反転させ、文字列に戻します
// }
// func ToUpper(s string) string {
// // strings.ToUpperを使用します
// }
// func ToLower(s string) string {
// // strings.ToLowerを使用します
// }
// func Length(s string) int {
// // len(s)を返します
// }
func main() {
// スペースを適切に処理するためにbufio.Scannerを使用して入力を読み取ります
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// 関数の仕様を解析します
funcList := strings.Split(functionSpecs, ",")
// テスト文字列を解析します
testList := strings.Split(testStrings, "|")
// TODO: 以下にコードを記述してください
// 1. パッケージヘッダーを表示します
// 2. funcListから利用可能な関数を表示します(配列の長さを確認してください)
// 3. 各テスト文字列ですべての関数をテストします
// 4. 統計を計算して表示します
// 5. 最長/最短の文字列を検索して表示します(testListに要素があるか確認してください)
// 6. 完了メッセージを表示します
// 次のようなstringutilパッケージの関数を使用することを忘れないでください:
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}