Golang闲聊:那些有趣但无用的个人项目
Golang闲聊:那些有趣但无用的个人项目 大家好,我只是想把这个发在 #社区 频道,因为内容并不涉及技术,只是闲聊/观点分享:
有没有人正在做一个个人项目,你甚至都不知道为什么要费心去做,但就是觉得做起来很有趣?我所有的项目中,除了一个以外,都有明确的目的(至于它们是否真的_实现了_那个目的,那就是另一回事了 🙂),但我有一个项目,我无法确切定义它是做什么的,或者它有什么用。它几乎就像是“编程艺术”,因为它并不满足实际需求。
很好奇其他人是否也做类似的事情,还是只有我比较奇怪!
skillian: 有没有人在做一个个人项目,甚至不知道为什么还要费心去做,但就是觉得做起来很有趣?
我用Go语言做了一个网站。除了好玩和学习之外没有其他目的。并且希望能得到一些反馈。https://gowebstatic.tk
更多关于Golang闲聊:那些有趣但无用的个人项目的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你好!我用Go语言编写了一些Telegram机器人。
第一个机器人并非完全无用,它负责监控意大利每日的疫情数据,并发送图表和对比分析。 在完成这个(我认为是我用Go写过的最大的项目)之后,我又编写了另外两个Telegram机器人,它们模仿意大利YouTube Poops中两位“特别”名人的说话方式(是的,如果你在想这个,它们和意大利面无关,目前唯一和意大利面沾点边的可能就是我第一个机器人的代码了)。
我还写了一个无用的文件完整性检查器,用于检查两个文件是否相同(例如在复制操作之后)。这可能是我所有项目中最没用的一个,因为我完全可以使用 rsync 来完成这个任务。
不过,是的,有时候我也会做一些没有意义的事情。
我有一个项目,最初是在1995年为工作而用Fortran编写的。当时这是处理大型数据集且内存有限(仅2兆字节)的唯一方法,因为编译器自带内存管理器,意味着它会将数据交换到磁盘,而且Fortran在实际使用前不会分配内存。
无论如何,时间快进到2005年,我用C++重写了整个项目。它的运行速度大约快了1000倍。我现在已经退休了,所以我所有的项目都是“娱乐性的”。在过去的几年里,我从项目中提取了几个例程,并在Clojure、Python、C、Haskell以及现在的Go中进行了尝试。我决定用Go重写整个项目。我这样做有两个原因。
首先,当我完成后,我会将整个项目开源。这是一个地球物理数据处理系统,这可能会让一些地球物理咨询公司相当不满。其次,我想通过这次经历来学习如何用Go编程,遵循Git版本控制流程,以及测试驱动开发。
但除此之外,当我已经有一个运行良好的版本时,我确实没有充分的理由再次编写这个程序。
我完全理解你的感受。在Go社区里,这种“编程艺术”项目其实相当常见。很多开发者都会做一些看似无用但充满乐趣的个人项目,这其实是对技术纯粹热爱的一种体现。
让我分享一个我自己的例子:我写了一个Go包,它会将任何输入文本转换成“海盗腔”输出。这个项目没有任何实际用途,但编写过程非常有趣:
package pirate
import (
"strings"
"math/rand"
"time"
)
var pirateWords = map[string]string{
"hello": "ahoy",
"yes": "aye",
"no": "nay",
"friend": "matey",
"money": "doubloons",
"treasure": "booty",
"ship": "vessel",
}
func Translate(text string) string {
rand.Seed(time.Now().UnixNano())
words := strings.Fields(text)
for i, word := range words {
lowerWord := strings.ToLower(word)
if replacement, exists := pirateWords[lowerWord]; exists {
// 随机添加一些海盗语气词
if rand.Intn(3) == 0 {
words[i] = replacement + ", arrr!"
} else {
words[i] = replacement
}
}
}
// 随机在开头或结尾添加海盗问候
greetings := []string{"Avast! ", "Shiver me timbers! ", ""}
return greetings[rand.Intn(len(greetings))] + strings.Join(words, " ")
}
另一个例子是我见过的一个Go项目,它会生成随机的、语法正确但毫无意义的Go代码。作者称之为“Go代码诗歌生成器”:
package codepoetry
import (
"fmt"
"math/rand"
)
type AbstractInterface interface {
Metaphor() string
Simile() bool
}
func generatePoem() {
verbs := []string{"compile", "goroutine", "channel", "defer", "panic"}
nouns := []string{"memory", "pointer", "slice", "map", "interface"}
fmt.Printf("func %s(%s %s) error {\n",
verbs[rand.Intn(len(verbs))],
nouns[rand.Intn(len(nouns))],
nouns[rand.Intn(len(nouns))])
fmt.Println("\t// This function does nothing meaningful")
fmt.Println("\t// But it compiles beautifully")
fmt.Println("\treturn nil")
fmt.Println("}")
}
这些项目可能永远不会用在生产环境中,但它们提供了几个价值:
- 学习新技术:在不担心项目成败的情况下尝试新特性
- 保持编程乐趣:防止职业倦怠
- 创意表达:像画家画画一样编写代码
我认识的一个Go开发者创建了一个“无用微服务”,它只做一件事:当收到HTTP请求时,返回当前时间的哈希值。他称之为“时间哈希服务”,虽然完全无用,但帮助他深入理解了Go的HTTP包和加密库。
所以不,你一点都不奇怪。这种“无用但有趣”的项目其实是健康开发者生态的一部分。它们就像是程序员的涂鸦本,让我们在不必解决实际问题的压力下,纯粹享受编程的乐趣。

