用Go语言打印世界杯32强赛程表
说实话,每次世界杯开打前,我都要手动查赛程表,翻来翻去挺费劲的,后来一想,何不自己用Go写个小程序,把32强赛程表直接打印出来?说干就干,这篇文章就是边写边琢磨的记录,可能有坑,但绝对真实。
第一步:先把32强数据塞进结构体
世界杯32强可不是随便排的,一共8个小组,每组4支球队,我先定义了一个Team结构体,用来存球队名字和所属小组:

type Team struct {
Name string
Group string
}
数据怎么来?我直接手敲了32支球队,比如A组是卡塔尔、厄瓜多尔、塞内加尔、荷兰……(这里不列全,反正你懂),为了节省篇幅,我用一个切片存所有球队,然后按小组分组打印。
关键点:小组赛是循环赛,每队打3场
别小看这个逻辑,我一开始写了个暴力循环,结果发现同一个对阵打印了两遍,后来改成:每组内用双重循环,i从0到3,j从i+1到3,这样刚好6场比赛,不重复不漏掉。
第二步:用map按小组赛分组
数据存好了,得先按小组归类,我用了一个map[string][]Team,键是小组字母,值是球队列表,写了个函数groupTeams:
func groupTeams(teams []Team) map[string][]Team {
grouped := make(map[string][]Team)
for _, t := range teams {
grouped[t.Group] = append(grouped[t.Group], t)
}
return grouped
}
这步简单,但有个小坑:map是无序的,打印赛程时我想按A到H顺序显示,所以又额外遍历了"ABCDEFGH"字符串,保证输出不乱。
第三步:打印赛程表,带点格式
我决定输出成表格样式,用fmt.Printf对齐,群里有朋友问“不用HTML能看吗?”——当然能,终端里看更直接,但为了这篇文章的演示效果,我改成生成纯文本表格,用竖线和横线画边框:
| 小组 | 球队 | 赛程(对手) |
|---|---|---|
| A组 | 卡塔尔 | 厄瓜多尔、塞内加尔、荷兰 |
| A组 | 厄瓜多尔 | 卡塔尔、塞内加尔、荷兰 |
(上表只做示例,实际数据我写在代码里了)
打印函数长这样:
func printSchedule(grouped map[string][]Team) {
groups := "ABCDEFGH"
for i := 0; i < len(groups); i++ {
letter := string(groups[i])
teams := grouped[letter]
fmt.Printf("=== %s组 ===\n", letter)
for idx, t := range teams {
fmt.Printf("%d. %s\n", idx+1, t.Name)
}
// 打印该组所有对阵
for i := 0; i < len(teams); i++ {
for j := i+1; j < len(teams); j++ {
fmt.Printf(" %s vs %s\n", teams[i].Name, teams[j].Name)
}
}
}
}
第四步:加个“快速查看”功能
写完后我试用了一下,发现一个问题:想查某支队赛程时得翻半天,于是加了个searchTeam函数,输入球队名,直接返回它所在小组和所有对手:
func searchTeam(teams []Team, name string) {
// 遍历teams,找到该队后输出它所在小组及同组对手
}
这部分不难,但要注意大小写匹配,我用了strings.EqualFold,这样用户输入“卡塔尔”或“卡塔尔(队名注意)”都能匹配。
第五步:踩坑记录
- 漏掉东道主:我一开始只写了31队,后来检查时才发现缺了卡塔尔,世界杯32强可不能漏东道主。
- 小组字母混用:有个地方我写了"Group A",另个地方写"GroupA",导致map查不到,统一用单字母后解决。
- 赛程顺序:实际世界杯赛程有日期顺序,但我这个简化版只考虑对阵组合,没加时间,如果有需要,可以再扩展一个
Match结构体包含日期和场地。
让代码“说人话”
最后我做了个小优化:输出时带上表情符号,表示比赛,🇶🇦表示卡塔尔(当然终端可能显示不了国旗,我改成文字),这样看起来更亲切,不是冷冰冰的数据。
实际运行效果:
=== A组 ===
1. 卡塔尔
2. 厄瓜多尔
3. 塞内加尔
4. 荷兰
赛程:
卡塔尔 vs 厄瓜多尔
卡塔尔 vs 塞内加尔
卡塔尔 vs 荷兰
厄瓜多尔 vs 塞内加尔
厄瓜多尔 vs 荷兰
塞内加尔 vs 荷兰
看着挺像回事儿的,真正世界杯赛程还有淘汰赛32强、16强、四分之一决赛等等,我这个只覆盖了小组赛阶段,如果要完整模拟整个赛程,那得再写个KnockoutStage函数,处理胜者晋级、平局加时这些逻辑。
写到这儿我也困了,代码先放GitHub上(个人仓库,非外链),回头有灵感了再更新淘汰赛部分,你如果也喜欢足球和Go,不妨复制这段代码自己跑跑,改改球队名,加点你主队的数据,说不定会发现更多坑——然后你也会像我一样,边骂边笑地修好它。
本文来自作者[kyadmin]投稿,不代表678体育 - 全网热门体育赛事高清直播平台立场,如若转载,请注明出处:http://www.wuxijiangyou.cn/kj/1026.html
评论列表(4条)
我是678体育 - 全网热门体育赛事高清直播平台的签约作者“kyadmin”!
希望本篇文章《用Go语言打印世界杯32强赛程表—边写边聊的实战笔记》能对你有所帮助!
本站[678体育 - 全网热门体育赛事高清直播平台]内容主要涵盖:678体育,678体育官网,678赛事直播
本文概览:用Go语言打印世界杯32强赛程表说实话,每次世界杯开打前,我都要手动查赛程表,翻来翻去挺费劲的,后来一想,何不自己用Go写个小程序,...