Golang闲聊:那些有趣但无用的个人项目

Golang闲聊:那些有趣但无用的个人项目 大家好,我只是想把这个发在 #社区 频道,因为内容并不涉及技术,只是闲聊/观点分享:

有没有人正在做一个个人项目,你甚至都不知道为什么要费心去做,但就是觉得做起来很有趣?我所有的项目中,除了一个以外,都有明确的目的(至于它们是否真的_实现了_那个目的,那就是另一回事了 🙂),但我有一个项目,我无法确切定义它是做什么的,或者它有什么用。它几乎就像是“编程艺术”,因为它并不满足实际需求。

很好奇其他人是否也做类似的事情,还是只有我比较奇怪!

4 回复

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("}")
}

这些项目可能永远不会用在生产环境中,但它们提供了几个价值:

  1. 学习新技术:在不担心项目成败的情况下尝试新特性
  2. 保持编程乐趣:防止职业倦怠
  3. 创意表达:像画家画画一样编写代码

我认识的一个Go开发者创建了一个“无用微服务”,它只做一件事:当收到HTTP请求时,返回当前时间的哈希值。他称之为“时间哈希服务”,虽然完全无用,但帮助他深入理解了Go的HTTP包和加密库。

所以不,你一点都不奇怪。这种“无用但有趣”的项目其实是健康开发者生态的一部分。它们就像是程序员的涂鸦本,让我们在不必解决实际问题的压力下,纯粹享受编程的乐趣。

回到顶部