用 Golang 手撸一个 NBA 总分排行榜,这事儿还挺上头的

为什么突然想用Go写NBA排行榜?昨晚刷手机,看到朋友在群里晒了一张NBA历史总得分榜的截图,我盯着那个勒布朗·詹姆斯...

为什么突然想用 Go 写 NBA 排行榜?

昨晚刷手机,看到朋友在群里晒了一张 NBA 历史总得分榜的截图,我盯着那个 勒布朗·詹姆斯 的名字看了半天,心想:这些数据要是能用代码自己抓下来、自己排一排,那得多带劲?

我打开了 Golang,说实话,Go 语言写这种数据处理的小工具,真的挺顺手的,你不需要搞一堆复杂的依赖,一个 net/http 加上 encoding/json,基本就能把事儿办了。

第一步:数据从哪儿来?

NBA 官方其实有公开的 API,但直接调有点麻烦,我找了个第三方的开源接口——balldontlie API,它提供球员赛季数据,包括总得分,你也可以用 SportsRadar 或者 NBA Stats 的官方数据,不过那得申请 key。

package main

import ( "encoding/json" "fmt" "io/ioutil" "net/http" "sort" )

type PlayerStats struct { ID int json:"id" FirstName string json:"first_name" LastName string json:"last_name" Points float64 json:"pts" Season int json:"season" }

用 Golang 手撸一个 NBA 总分排行榜,这事儿还挺上头的

第二步:怎么排序?

拿到数据后,我用了 Go 标准库的 sort.Slice,按分数降序排列,代码其实就几行:

sort.Slice(players, func(i, j int) bool {
    return players[i].Points > players[j].Points
})

但这里有个坑——有些球员打了很多赛季,而有的只打了几个赛季,如果直接按总得分排,对年轻球员不公平,所以我加了个 “赛季场均得分” 的指标,作为辅助参考。

第三步:展示结果,顺便加点“人味儿”

数据排好了,怎么展示?我偷了个懒,直接在终端里打印成表格,也可以用 Go 的 text/template 做成 HTML 页面,但命令行看起来更 geek 一点。

排名 球员 总得分 赛季数
1 LeBron James 38652 20
2 Kareem Abdul-Jabbar 38387 20
3 Karl Malone 36928 19
4 Kobe Bryant 33643 20
5 Michael Jordan 32292 15

你看,乔丹只打了15个赛季,拿第五名,这要算场均得分,他才真是天花板,Go 的排序逻辑我还特意加了个 “场均得分超过20分” 的过滤器,不然一堆角色球员进来,看着乱。

第四步:动态更新排行榜

比赛每天都在打,数据也得跟着变,我写了个小脚本,每天定时跑一次,把 NBA 官方数据 抓下来重排,Go 的 time.Ticker 挺好用:

ticker := time.NewTicker(24 * time.Hour)
for range ticker.C {
    fetchAndUpdateRanking()
}

但说实话,API 有时候会限流,所以我加了个重试机制,每次失败后等30秒再试,Go 的 time.Sleep 虽然简单,但配合 for 循环用,挺稳的。

第五步:收尾——写点心里话

弄完这个排行榜,我突然觉得,技术有时候就是为了满足那点好奇心,你想知道谁是历史得分王?用 Go 写个爬虫加排序,半小时搞定,想实时跟踪?加个定时任务,想分享给朋友?打出来贴群里就行。

我这个版本还很糙,比如没做并发优化,如果一次要处理几百个球员的数据,http.Get 串行发请求会慢。又不是不能用,对吧?

我把代码扔到了 GitHub 上,备注写的是:“用 Go 给篮球迷写的小玩具”,如果你也喜欢篮球和代码,可以试试改一改,比如加上三分命中率、罚球数什么的——我懒得搞了,但你想搞的话,记得把 sort.Slice 的排序条件改一下就行。

行了,今晚骑士队比赛快开始了,我得赶紧看一眼詹姆斯还能不能再往上冲一冲。

本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.b22b.cn/nba/9.html

(26)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-06-20

    我是be365的签约作者“kyadmin”!

  • kyadmin
    kyadmin 2026-06-20

    希望本篇文章《用 Golang 手撸一个 NBA 总分排行榜,这事儿还挺上头的》能对你有所帮助!

  • kyadmin
    kyadmin 2026-06-20

    本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名

  • kyadmin
    kyadmin 2026-06-20

    本文概览:为什么突然想用Go写NBA排行榜?昨晚刷手机,看到朋友在群里晒了一张NBA历史总得分榜的截图,我盯着那个勒布朗·詹姆斯...

    联系我们

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们