VS Code、Golang 使用 switch/case 格式化顽固情况

问题描述 投票:0回答:1
  • 我使用的是 VSCode
    1.87.2
    ,操作系统是 Ubunu 23.10
  • 使用 Go 扩展
    v0.41.2
  • 出于测试目的,我禁用了所有其他扩展
  • 使用
    go1.21.0 linux/amd64

我在我的

*.go
Golang 文件中编写了这段代码:

switch {
  case myString == "":
    fmt.Println("Empty string")
  case myString == "foo":
    doFoo()
  case myString == "bar":
    fmt.Println("We got bar now!")
  default:
    fmt.Println("Another default")
}

VS code 将其格式化为:

switch {
case myString == "":
  fmt.Println("Empty string")
case myString == "foo":
  doFoo()
case myString == "bar":
  fmt.Println("We got bar now!")
default:
  fmt.Println("Another default")
}

问题,有没有一种方法可以合理地配置 VSCode/Go 扩展/其他(即不必编写自己的 VS Code 扩展或绕过不寻常的奇怪设置),以便保留片段 1 的格式?

我尝试过的:

  • 尝试过的格式化程序:
    gofumpt
    gofmt
    goimports
  • 尝试禁用所有扩展(除了 go)。

不知道出了什么问题。

go visual-studio-code vscode-extensions
1个回答
0
投票

确实,由于某种原因,Go 风格不在

switch
内缩进,可能是 C 风格的延续。例如,这是Effective Go中使用的样式。此外,Go 社区普遍反对改变风格,而且他们的工具通常是不可配置的。 VSCode 自己的语言服务器和所有你提到的 Go 工具都会遵循这种风格。

但是,

goformat
可以让你调整风格。例如,
enter=1 indent=2
将为您提供更熟悉的样式,其中包含 2 个字符空白缩进和所有块缩进。

goformat.exe -style "enter=1" .\tmp\test.go

package main

import "fmt"

func main() {
  myString := "foo"

  switch {
    case myString == "":
      fmt.Println("Empty string")
    case myString == "foo":
      fmt.Println("foo")
    case myString == "bar":
      fmt.Println("We got bar now!")
    default:
      fmt.Println("Another default")
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.