【问题标题】:Why does the vscode golang plugin remove spaces around operators on save?为什么 vscode golang 插件在保存时会删除运算符周围的空格?
【发布时间】:2021-05-31 20:08:18
【问题描述】:

如果重要的话,我已经写代码很多年了,但我现在才同时探索 golang 和 vscode。

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

我一直在逐步完成一些简单的 golang 教程,并注意到当我保存我编辑过的文件时发生了一件奇怪的事情。

这是我的行:

out = append(out, base + v)

当我保存它时,它变成了这样:

out = append(out, base+v)

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

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

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

【问题讨论】:

  • Go 的标准风格是 go fmt 产生的任何东西。
  • 好的,这两个 cmets 实际上并没有回答我的大部分显式和隐式问题。我还阅读了有关 gofmt 的文档,但我找不到任何实际描述格式规则的内容。
  • 我什至在“settings.json”的“[go]”块中将“editor.formatOnSave”设置为false,它仍然会进行这种转换。
  • 引用 Rob Pike 的话,“Gofmt 的风格没有人喜欢,但 gofmt 是每个人的最爱。”工具的重点是消除任何关于格式化风格的毫无意义的争论,并让代码统一。跨度>

标签: go visual-studio-code


【解决方案1】:

那么,这是怎么回事,为什么?

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

下面的 sn-p 是用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 命令会删除问题中+ 周围的空格,因为+ 优先于,

【讨论】:

    【解决方案2】:

    这与 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)
    }
    

    【讨论】:

    • 好的,你可以在 vscode 的什么地方关闭格式化程序,因为我已经取消选中了“保存时格式化”?我在哪里可以获得有关 gofmt 实施的格式化规则的信息?
    • @DavidM.Karr 这些是不同的问题——也许你可以发新帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多