go fmt 为什么强制 8 字符宽度的 tab 缩进?

2017-03-04 20:50:56 +08:00
 itoolset

因为 golang 的标准库很丰富,想要的模块都内置了所入了坑。。

但是 go fmt 这个缩进很烦啊,都不能自定义的。

https://golang.org/cmd/gofmt/

Gofmt formats Go programs. It uses tabs (width = 8) for indentation and blanks for alignment.

不会是懒得做选项吧?

我习惯缩进四个字符宽度=1 个 tab 在 goland IDE 上缩进成这个样子好丑,要是再嵌套个两三层。。

还有不能导入多余包,不允许无用语句之类的, 感觉很霸道很不讲道理呀这么做

15046 次点击
所在节点    程序员
15 条回复
chingli
2017-03-04 21:01:59 +08:00
Go 默认是用 tab 缩进的, 8 字符宽是你你编辑器设置的问题。我记得也可是设为 4 个空格而不是 tab 。
itoolset
2017-03-04 21:13:43 +08:00
@chingli go fmt 默认就是
goofansu
2017-03-04 21:17:44 +08:00
你可以设置编辑器里的 tab 显示成多少个空格,至少 emacs 里是可以的
xiaq
2017-03-04 21:21:09 +08:00
gofmt 实际上用到这个假设的地方是很少的,你在编辑器里把 Tab 宽度设成别的值也没什么影响。这个宽度值多半是 Rob Pike 用的。

倒入包的问题用 goimports 就能解决。
chingli
2017-03-04 21:22:47 +08:00
@itoolset 以往 go 是可以设置用空格缩进的,现在不行了。详见: https://news.ycombinator.com/item?id=7914523

不过你缩进 8 个空格位还是因为你编辑器的原因,比如在 .vimrc 中设置: set tabstop=4

缩进就占 4 个空格位了。
xiaq
2017-03-04 21:26:28 +08:00
从设计思路上来说, Go 是个自带风格指引( style guide )的语言。

导入包必须要用、变量必须要用,这些如果出现在风格指引里面,是一点都不过分的。
itoolset
2017-03-04 21:28:12 +08:00
@chingli @xiaq
搞定了 fmt 是没问题了,但是我觉的他这个包和语句管的太宽了
reus
2017-03-04 21:28:31 +08:00
go fmt 用 '\t' 缩进。
一个 '\t' 显示多宽,是你的编辑器的事情,和 go fmt 没有关系。
统一缩进字符是十分有益的。
CRVV
2017-03-04 21:59:11 +08:00
@itoolset

导入一个包会产生副作用,比如 http/pprof 的用法就只是把它 import
import 一堆不用的包会编译进去一堆不用的东西,还会在启动的时候调用一堆不用的 init 函数,这显然不是 Go 的风格
Technetiumer
2017-03-04 22:10:01 +08:00
tab 本身就是 8 个空格宽啊
itoolset
2017-03-04 22:37:00 +08:00
@CRVV 那无用语句呢?
@Technetiumer 这个看设置的吧,有点默认四空格有的八空格,求可靠参考资料
gamexg
2017-03-05 00:03:39 +08:00
在项目根目录加个 .editorconfig 文件

# http://editorconfig.org

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.go]
indent_style = tab
indent_size = 4

[*.tmpl]
indent_style = tab
indent_size = 2

[*.{less,yml}]
indent_style = space
indent_size = 2

[*.js]
indent_style = space
indent_size = 4
Technetiumer
2017-03-05 14:44:01 +08:00
@itoolset 我记得 1 个制表符本身就是 8 个空格宽度,而一般都会在编辑器里设置成 1 个制表符 4 个空格宽度

https://www.zhihu.com/question/19960028/answer/15262434
http://baike.baidu.com/item/Tab/4023
https://en.wikipedia.org/wiki/Tab_key
https://zh.wikipedia.org/wiki/製表鍵
itoolset
2017-03-05 17:48:56 +08:00
@Technetiumer
谢谢长知识了
afpro
2017-03-06 05:39:35 +08:00
go 最讨厌的是 他知道哪些是无用 import 那打包的时候忽略掉就好了 他不 他非让你改 开发的时候好恶心啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/344953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX