• 我正在使用VSCode 1.87.2,操作系统是Ubuntu 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代码将其格式化为:

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扩展/其他在一个REASONABLE(即,不必编写自己的VS Code扩展或破解不寻常的奇怪设置),以便可以保留代码片段1的格式?

我try 的是:

  • 已try 格式化程序:gofumptgofmtgoimports
  • 已try 禁用所有扩展(Go除外).

不知道是怎么回事.

推荐答案

确实,Go风格因为某种原因而不在switch中嵌套,这可能是C风格的延续.例如,这是Effective Go中使用的样式.此外,Go社区通常反对改变风格,他们的工具通常是不可配置的.VSCode自己的语言服务器和你提到的所有Go工具都将遵循这种风格.

但是,goformat可以让你调整风格.例如,indent=2 switch enter=1将给你一个更熟悉的样式,有2个字符的空格缩进,switch 块将缩进.

goformat.exe -style "indent=2 switch 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")
  }
}

VSCode可以配置为使用goformat.在Go扩展中搜索"Format Flags"和"Format Tool".您可以将您的样式 Select 放入一个文件中,并将其与您的项目一起提交.

Go相关问答推荐

无法找到与golang、nginx和postquist进行的docker-compose./主要

GORM没有从 struct 创建完整的表,如何修复?

如何使用GO GIN从Auth0 JWT内标识检索权限

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

如何在 zap 记录器库中使用自定义时间函数

Go安装成功但没有输出简单的Hello World

使用goqu无法获取响应

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

当我的 go build 成功时,如何修复我的 docker build 失败? Dockerfile 包括 go mod 下载

如何使用 sync.WaitGroup 来执行所有的 goroutine?

使用 Grafana alert 在几分钟内重复alert

当函数返回一个函数时,为什么 Go 泛型会失败?

如何为导入的嵌入式 struct 文字提供值?

如何使用带有方法的字符串枚举作为通用参数?

如何根据 Go 中第二次出现的分隔符拆分字符串?

Gorm 在保存/创建时序列化 struct

如何在Golang中的差异函数中杀死命令Exec

Golang 有类似 C++ 的 decltype 的东西吗?

Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?

在 go (1.18) 的泛型上实现多态的最佳方法是什么?