Go: cmd/go:默认情况下,go 变得非常慢,没有反馈

创建于 2016-11-17  ·  3评论  ·  资料来源: golang/go

您使用的是哪个版本的 Go ( 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 设计,它看起来像是坏了。

FrozenDueToAge

最有用的评论

沉默规则并不是说除非出现错误或特别要求输出,否则程序应该绝对沉默,而是程序不应该不必要地输出。 鉴于反馈说一个需要 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的用户”的好处。

所有3条评论

这是 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也太吵了。

不幸的是,我真的想不出一种既不嘈杂又在需要时提供足够信息的机制。

此页面是否有帮助?
0 / 5 - 0 等级