Menu
CoddyTech

回顾:唯一用户名

本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 37 课,共 68 课。

challenge icon

挑战

简单

使用 Go 集合惯用写法构建一个用户名注册系统,防止用户名重复。本挑战将展示如何创建一个可靠的用户管理系统,确保所有注册的用户名都不重复。

你会收到两个输入:

  • 一个字符串,其中包含以逗号分隔的现有用户名(例如,"alice123,bob_dev,charlie2024,diana_codes")
  • 一个字符串,其中包含以逗号分隔的新用户名注册尝试(例如,"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")

你的任务是:

  1. 使用 Go 惯用写法 map[string]struct{} 创建集合,用于存储已注册的用户名
  2. 通过按逗号拆分第一个输入字符串,获取现有用户名
  3. 使用空结构体字面量 {} 作为值,将每个现有用户名添加到集合中
  4. 通过按逗号拆分第二个输入字符串,获取新的注册尝试
  5. 对于每次注册尝试,使用逗号 ok 惯用写法检查该用户名是否已存在于集合中
  6. 显示每次尝试的注册过程:
    • 如果用户名可用:输出 "Registered: [username]" 并将其添加到集合中
    • 如果用户名已存在:输出 "Username taken: [username]"
  7. 处理完所有注册尝试后,显示完整摘要:
    • "Registration Summary:"
    • "Initial usernames: [initial_count]"
    • "Registration attempts: [attempts_count]"
    • "Successful registrations: [successful_count]"
    • "Rejected (duplicate): [rejected_count]"
    • "Total registered usernames: [total_count]"
  8. 最后,列出系统中的所有已注册用户名:
    • 标题:"All registered usernames:"
    • 每行显示一个用户名:"@[username]"

使用 strings 包按逗号拆分输入字符串。本挑战将展示 Go 集合惯用写法如何高效地防止用户注册系统中的用户名重复,在确保数据完整性的同时,快速查找并验证用户名。

亲手试试

package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	// 读取输入
	var existingUsernames string
	var newRegistrations string
	fmt.Scanln(&existingUsernames)
	fmt.Scanln(&newRegistrations)
	
	// 解析输入字符串
	existing := strings.Split(existingUsernames, ",")
	attempts := strings.Split(newRegistrations, ",")
	
	// 用 Go 的惯用写法创建集合
	userSet := make(map[string]struct{})
	
	// TODO: 在下面编写你的代码
	// 1. 将现有用户名添加到集合中
	// 2. 处理每次注册尝试
	// 3. 显示每次注册尝试的结果
	// 4. 计算并显示汇总结果
	// 5. 列出所有已注册的用户名(记得排序,确保输出顺序一致)
	
}

逻辑与流程中的所有课

自己练习: Go 在线编译器