说实话,一开始接到这个题目的时候,我脑子里冒出来的第一个念头是:“体育知识手抄报” 跟 Golang 能有什么关系?一个是用笔在纸上画格子、贴剪报的小学作业,一个是搞后端服务、处理并发的高冷编程语言,但转念一想,我平时写代码的时候,不也经常需要整理知识点吗?那些体育知识,比如游泳的泳姿分类、篮球的规则演变、田径项目的世界纪录——如果把它们当成数据结构来梳理,用手抄报的形式呈现,再用 Golang 写个小工具来辅助,这事儿还挺有意思的。
好吧,今天就试着用 Golang 的思维,来聊聊怎么“编程式”地做一份体育知识手抄报。
体育知识手抄报,到底是个啥?
先别急着写代码,咱得先弄清楚手抄报是干什么用的,小学老师布置手抄报,不是让你当艺术家,也不是让你当运动员,而是让你通过搜集、整理、排版、呈现这个过程,把知识消化掉,体育知识手抄报尤其特别,因为它涉及的内容五花八门:
- 运动项目的历史:比如马拉松是怎么来的,足球起源于中国的蹴鞠。
- 技术规则:比如为什么羽毛球发球不能过腰,为什么篮球有24秒进攻时限。
- 知名运动员:比如博尔特的9.58秒到底多离谱,梅西的盘带为什么防不住。
- 趣味冷知识:比如乒乓球曾经在奥运会上被取消过,游泳比赛里出发台上的小喇叭是怎么回事。
你看,这些信息其实天然地可以结构化,在 Golang 里,我们习惯用 struct 来定义一类事物,体育知识手抄报,本质上就是一个“体育知识合集”的结构体,我们不妨先试着用代码来定义它。
type SportsHandCopy struct { string
Sections []KnowledgeSection
CreatedDate string
VisualStyle string // 简约风”“卡通风”
}
type KnowledgeSection struct {
Category string // 田径”“球类”
Items []FactItem
}
type FactItem struct {
Name string
Description string
Source string // 数据来源,国际奥委会官网”
IsFunFact bool // 是不是冷知识
}
看到没有?用这种结构去思考,你手抄报里的每一个模块、每一条知识,都会变得清晰,你不是在乱贴剪报,你是在填充一个 KnowledgeSection 的切片,每个切片里是一堆 FactItem。
用 Golang 的数据结构,给知识分分类
下面我把自己去年做的一份“体育知识手抄报”的素材,按照这个结构整理出来,别嫌啰嗦,这些内容我都是一个一个查资料写的,参考了《奥林匹克宪章》和国际田联的官方记录。
田径类:人类对自己极限的挑衅
田径是体育里最古老的项目之一,没有花哨的器械,跑、跳、投,就这么简单。
- 100米世界纪录:博尔特,9.58秒,这个成绩有多恐怖?换算成时速,大概是37.58公里每小时,而人类的平均跑步时速大约是10到15公里,博尔特在最后几步甚至回头看了一眼对手。(据说他当时觉得破了世界纪录就够了,没想冲得更快)
- 马拉松的起源:公元前490年,希腊士兵菲迪皮德斯从马拉松跑到雅典报捷,全程约40公里,后来1908年伦敦奥运会为了照顾皇室观看,把距离延长到42.195公里,一直沿用至今。
- 跳高的技术演变:从最早的剪式、滚式,到现在的背越式,福斯贝里在1968年用背越式跳过2.24米,全场震惊,现在所有顶尖选手都用这个姿势。
| 项目 | 世界纪录 | 保持者 |
| 男子100米 | 58秒 | 博尔特(牙买加) |
| 女子100米 | 49秒 | 格里菲斯·乔伊娜(美国) |
| 男子马拉松 | 2小时01分39秒 | 基普图姆(肯尼亚) |
说实话,每次查到这些数据,我都觉得人类真的挺牛的,明明都是两只脚,博尔特那两条腿就跟装了弹簧似的。
球类运动:规则里的江湖
球类运动是最受大家喜欢的,因为参与门槛低,一个球,一群朋友,就能玩一下午,但每个球类运动的规则,细说起来都够写一本书。
- 篮球:24秒进攻时限,1954年之前,篮球比赛经常出现僵持局面,领先的一方就运球拖延时间,观众看得想睡觉,后来老板们受不了了,规定进攻方必须在24秒内完成一次投篮。从此篮球活过来了。
- 羽毛球:为什么不能过腰?这个规则是为了限制发球优势,如果你能把球发得又低又平,那对方接起来就很痛苦,所以规定发球时,球拍和球都不能超过腰部,不过2021年国际羽联改了规则,现在只看球拍高度,我其实觉得改得有点奇怪。
- 足球:越位规则,越位可能是体育规则里最让人头疼的一个,简单说:你接球的时候,如果你比对方倒数第二名防守球员更靠近底线,那你就越位了,但如果你没参与进攻,或者跟防守球员平行,那不算越位,裁判判断的时候全靠肉眼,VAR(视频助理裁判)出现后才稍微公平一点。
对了,冷知识一个:乒乓球的大球改革,2001年之前,乒乓球用的是直径38毫米的小球,旋转强、速度快,观众根本看不清,后来国际乒联改成40毫米大球,球速慢了15%左右,回合变多,观众爱看了,你看,所有改动都是为了“让人看得懂”。
水上项目:在失重里找平衡
水里的运动更考验技巧,因为水的阻力是空气的800倍。
- 游泳泳姿:自由泳(爬泳)、蛙泳、仰泳、蝶泳,其中蝶泳是1924年才被正式承认的泳姿,之前大家都是用蛙泳腿,有人觉得蛙泳腿太慢,就发明了“海豚腿”,蝶泳就这么来了。
- 跳水评分标准:裁判看的是起跳高度、空中姿态、入水水花,0分到10分,运动员从10米台跳下来,从起跳到入水大概只有1.5秒,要完成翻腾、转体,在那一瞬间调整身体到完美角度,太厉害了。
- 花样游泳:以前叫“水上芭蕾”,因为运动员在水里的动作跟芭蕾一样优雅,但她们其实都是在憋气状态完成动作,一口气憋两分钟,还得面带微笑,我就憋不了。
冰雪与极限:小众但刺激
这些项目平时接触不多,但一到冬奥会就特别吸睛。

- 短道速滑:速度很快,而且允许一定程度的身体接触,你撞我一下,我推你一把,只要不故意犯规,所以经常出现摔倒、判罚的情况。
- 单板滑雪:起源于上世纪60年代,一个美国人把两个孩子滑雪板绑在一起,发明了单板,后来发展出U型池、大跳台等花样。
- 冰壶:被誉为“冰上的国际象棋”,没有绝对的体能,全靠策略和手感,运动员在冰壶出手后会疯狂擦冰,其实是减小摩擦力,让冰壶走得更远更直。
怎么用 Golang 把这些知识“手抄”出来?
好了,素材有了,结构有了,现在问题来了:怎么用 Golang 做一份可视化的手抄报?
最简单的办法是写一个命令行工具,把这些知识点按格式打印出来,我试过,代码就几十行:
package main
import (
"fmt"
)
func main() {:= "体育知识手抄报 - Golang版"
fmt.Println(title)
fmt.Println("===========================")
// 定义知识
facts := []string{
"1. 博尔特100米9.58秒,人类最快",
"2. 马拉松起源自公元前490年菲迪皮德斯",
"3. 篮球24秒规则救了比赛",
"4. 乒乓球改大球是为了增加回合数",
"5. 蝶泳是1924年才被承认的泳姿",
}
for _, fact := range facts {
fmt.Println("* " + fact)
}
}
但说真的,能跑是能跑,看起来一点手抄报的样子都没有,后来我换了个思路:用 Golang 生成 HTML 文件,然后在浏览器里打开,或者打印出来,这样就能控制媒体查询和字体样式。
我写了一个函数,接收一个 []FactItem 切片,然后生成一个漂亮的卡片式布局,每个卡片代表一个知识条目,卡片有颜色区分类别,用 Golang 的 html/template 包来做渲染,输出一个 .html 文件,双击就能看。
虽然最终效果不如手绘那么有温度,但胜在整洁、可复用、可扩展,你改一个知识点,改一条数据,重新跑一下代码,一份全新的手抄报就出来了,如果你愿意,还可以加上随机排序功能,每次生成的版面都不一样。
一点小感悟:编程和手抄报是同一回事
写到这儿我忽然觉得,用 Golang 做手抄报这件事,跟小时候在纸上画手抄报并没有什么本质区别,都是把混乱的信息整理成有序的结构,只不过小时候用的是尺子、彩笔、胶水,现在用的是 struct、slice、template。
那个用蜡笔在A3纸上画格子的我,和现在在终端里敲 go run 的我,其实都在做同一件事:让知识变得更容易被看见、被记住。
所以下一次如果你要给小朋友做体育知识手抄报,或者自己要做一个体育知识的汇总,不妨试着先用 Golang 把数据结构定义清楚,把知识点分好类,把冷知识和正经知识分开,然后再决定是用纸笔呈现,还是直接生成电子文档,反正核心都是那几个struct。
好了,这篇文章是我边查资料边写出来的,过程中还看了一眼国际田联的最新纪录确认数字,可能排版有点乱,但内容应该够你拿去参考了,如果真要动手做个手抄报,记得把那些冷知识放在最显眼的位置,因为大家都喜欢那种“哦!原来是这样!”的感觉。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.yikaoba.cn/tiyu/321.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《用Golang写一份体育知识手抄报?这事儿我真试过》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:说实话,一开始接到这个题目的时候,我脑子里冒出来的第一个念头是:“体育知识手抄报”跟Golang能有什么关系?一个是用笔在纸上画格...