前置

由于平时有些修改 hosts 文件的需求(屏蔽广告啦),所以之前一直在用 SwitchHosts! 来自动下载远程 hosts 文件。

但 SwitchHosts! 还是有几点不尽如人意的地方:

上面这些其实都在能忍受的范围内,毕竟 又不是不能用 ,而且也没有其他合适的轮子,将就着也还能用。 但是!近期(也都两三个月了)直接不能用了。直接不能从远端下载更新 hosts 文件了,加上我瞅着作者也不活跃开发了,迫不得已,只好自己造轮子。

最开始时是用的 dotnet core C# 来写的,名为 hosts-tool,代码已基本可用,奈何我对 OO 不甚了解,后面的功能无法继续增加,也就未开源。加上种种原因,一直勉强用着。

后来,我学了 golang,由于其编译出来的可执行程序是单文件,所以使用 go 来重写 hosts-tool 势在必行。

重写

刚开始重写实际上是简单的把 C# 的函数写成 go 语言版本的。后来开始使用各种库、考虑跨平台。

下面是一些写代码过程中得到的经验与吐槽。

  • 为什么 args 里第一个是 c.Args().First() 第二个却是 c.Args().Get(1)) 。都用 c.Args().Get()) 之后从零数也不至于让人这么迷惑。
  • 将 aurora 以 . "github.com/logrusorgru/aurora" 方式引入经常会打印出来一些奇怪的字符。
  • 错误处理太烦人了。
  • 写入配置文件记得用 os.O_TRUNC 截断。

ROADMAP

下面是一些想起来了但暂时没动力写的功能

  • local hosts 功能,暂定是搞个 local 文件和 config 文件放一块
  • home 功能,hosts-tool-go home NAME 来直接浏览器打开这个 hosts 源
  • 无任何命令行参数附加打开时搞出一个交互式的命令行

慢慢摸咯,想起来时再写 23333