go version
)?$ go version
go version go1.7.3 darwin/amd64
go get
默认情况下似乎没有有用的反馈。
重现:
go get github.com/die-net/dhtproxy
然后这似乎冻结了大约 10-15 分钟。 没有反馈。
最终发现我可以:
go get -u -v github.com/die-net/dhtproxy
看看进度,似乎因为youtube/vitess
绝对是巨大的,这个命令需要永远。
我希望看到类似“获取项目、获取 deps、安装 deps 等”的内容,并带有某种进度条。
没有。 它只是在那里坐了大约 10 分钟。 我以为它坏了。
解决方案很明显 - 默认启用-v
。 在默认情况下让进程运行 10 分钟而没有输出是糟糕的 CLI 设计,它看起来像是坏了。
这是 Unix 的方式:默认情况下保持安静,除非请求冗长或出现错误。
我不认为这是我们会改变的事情。 甚至更多的人会反对默认情况下他们认为是垃圾邮件 (-v) 的内容。
沉默规则并不是说除非出现错误或特别要求输出,否则程序应该绝对沉默,而是程序不应该不必要地输出。 鉴于反馈说一个需要 15 分钟的进程没有挂起并不是不必要的,事实上,这是一个很好的 CLI 设计。
作为参考,我测试过的其他包管理器中没有 (0) 个默认是静默的。
$ pip install test
Collecting test
Downloading test-2.3.4.5.tar.gz
Building wheels for collected packages: test
Running setup.py bdist_wheel for test ... done
Stored in directory: /Users/rjones/Library/Caches/pip/wheels/0e/83/0d/f0f92214b5cce4bcbce4958ddacebf926e1c54c8445f0ba167
Successfully built test
Installing collected packages: test
Successfully installed test-2.3.4.5
$ npm install test
/tmp/
└─┬ [email protected]
└── [email protected]
( npm
有一个--silent
标志用于此功能)
$ brew install test
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core, homebrew/versions).
==> New Formulae
homebrew/versions/postgresql95
==> Updated Formulae
ruby ✔ tig tile38
==> Deleted Formulae
homebrew/versions/postgresql93
Error: No available formula with the name "test"
==> Searching for similarly named formulae...
These similarly named formulae were found:
cpptest cxxtest gjstest homebrew/science/swetest memtester slowhttptest testdisk unittest vttest
cpputest git-test homebrew/games/minetest js-test-driver phoronix-test-suite speedtest_cli testssl unittest-cpp
To install one of them, run (for example):
brew install cpptest
==> Searching taps...
These formulae were found in taps:
homebrew/completions/ctest-completion Caskroom/cask/aja-system-test Caskroom/cask/nsregextester Caskroom/versions/emacs-pretest
homebrew/emacs/test-simple Caskroom/cask/colortester Caskroom/cask/sqlitestudio
To install one of them, run (for example):
brew install homebrew/completions/ctest-completion
等等。
我认为说“因为它是 Unix”有点虚伪。 对于具有长时间运行任务的 Unix 程序来说,具有进度条是 _extremely_ 常见的 - 参见 rsync、wget、git 等。
这里没有进度条有什么好处? 似乎“似乎没有完全崩溃”的好处远远超过“不会惹恼一小部分讨厌反馈并且拒绝使用--silent
的用户”的好处。
虽然我不认为你提到的任何包管理器都是很好的例子(它们总是太吵了),但我同意go get
一些进度指示不会受到伤害. 尤其是 GitHub 的克隆速度相当慢,并且整体运行时间取决于依赖项的数量,这并不明显或用户事先不知道,因此不必主动决定使用-v
真的是一个很好的解决方案。
现在,进度条并不是一个真正的选项——默认情况下它太吵了,而且并不是所有的 VCS 默认都支持进度条。 默认情况下启用-v
也太吵了。
不幸的是,我真的想不出一种既不嘈杂又在需要时提供足够信息的机制。
最有用的评论
沉默规则并不是说除非出现错误或特别要求输出,否则程序应该绝对沉默,而是程序不应该不必要地输出。 鉴于反馈说一个需要 15 分钟的进程没有挂起并不是不必要的,事实上,这是一个很好的 CLI 设计。
作为参考,我测试过的其他包管理器中没有 (0) 个默认是静默的。
(
npm
有一个--silent
标志用于此功能)等等。
我认为说“因为它是 Unix”有点虚伪。 对于具有长时间运行任务的 Unix 程序来说,具有进度条是 _extremely_ 常见的 - 参见 rsync、wget、git 等。
这里没有进度条有什么好处? 似乎“似乎没有完全崩溃”的好处远远超过“不会惹恼一小部分讨厌反馈并且拒绝使用
--silent
的用户”的好处。