为什么vscode golang插件会在保存时删除运算符周围的空格?

为什么vscode golang插件会在保存时删除运算符周围的空格?,go,visual-studio-code,Go,Visual Studio Code,如果有关系的话,我已经写代码很多年了,但我现在只是同时探索golang和vscode 在我的Linux机器上,我安装了vscode(1.56.2)和golang插件(0.25.1) 我一直在浏览一些简单的golang教程,我注意到当我保存一个我编辑过的文件时发生了一件奇怪的事情 这是我的台词: out = append(out, base + v) 当我保存它时,它是这样的: out = append(out, base+v) 它删除了“+”运算符周围的空格。我搜索了vscode和golan

如果有关系的话,我已经写代码很多年了,但我现在只是同时探索golang和vscode

在我的Linux机器上,我安装了vscode(1.56.2)和golang插件(0.25.1)

我一直在浏览一些简单的golang教程,我注意到当我保存一个我编辑过的文件时发生了一件奇怪的事情

这是我的台词:

out = append(out, base + v)
当我保存它时,它是这样的:

out = append(out, base+v)
它删除了“+”运算符周围的空格。我搜索了vscode和golang扩展设置,但几乎没有发现它在保存时会做什么

事实上,在设置中,我没有选中“保存时格式化”


那么,这是什么,为什么?我有能力配置这个吗?

这与VScode无关。如果您有此文件:

package main
import "fmt"

func main() {
   var a []int
   a = append(a, 1 + 2)
   fmt.Println(a)
}
运行
gofmt file.go
将为您提供:

package main

import "fmt"

func main() {
        var a []int
        a = append(a, 1+2)
        fmt.Println(a)
}
那么,这是什么,为什么

编辑器在保存时运行
gofmt
命令。该命令使用空格显示运算符优先级

以下代码段是使用
gofmt
命令格式化的。请注意操作数如何更接近优先级较高的运算符

fmt.Println(a + b + c + d)
fmt.Println(a * b * c * d)
fmt.Println(a + b*c + d)
fmt.Println(a*b + c*d)

gofmt
命令删除问题中
+
周围的空格,因为
+
优先于

标准的Go样式是
Go fmt
产生的任何内容。请看,好的,这两个注释实际上并没有回答我的大部分显性和隐性问题。我还阅读了关于gofmt的文档,但我找不到任何真正描述格式规则的内容。我甚至在“settings.json”中的“[go]”块中将“editor.formatSave”设置为false,它仍然进行这种转换。引用Rob Pike的话,“没有人喜欢gofmt的风格,但gofmt是每个人的最爱。”。该工具的目的是消除关于格式化样式的任何毫无意义的争论,只需使代码统一。好的,在vscode中哪里可以关闭格式化程序,因为我已经有了“保存时格式化”未选中?我从哪里可以获得关于gofmt实现的格式规则的信息?@DavidM.Karr这些是不同的问题-也许你可以发表新的帖子