回顾:构建一个实用工具
本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 57 课,共 68 课。
挑战
简单创建一个功能全面的 stringutil 包,其中包含字符串处理函数,并在主程序中演示其用法。本挑战将测试你创建自定义工具包、实现导出函数,以及在另一个程序中使用该包的能力。
你会收到两个输入:
- 一个字符串,其中包含格式为
"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]"
- 按竖线拆分第二个输入,获取各个测试字符串
- 显示测试标题:
"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)
}逻辑与流程中的所有课
自己练习: Go 在线编译器