- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个关于 Go 的 gofmt 工具的问题,它根据官方 Go 规范自动格式化程序的输出(例如,你不能争论 Go 中括号应该放在哪里,因为那是显然是由规范修复的)。
在下一页:
http://golang.org/doc/effective_go.html
在“格式化”段落下,写着:
As an example, there's no need to spend time lining up the comments on the fields of a structure. Gofmt will do that for you. Given the declaration
type T struct {
name string // name of the object
value int // its value
}
gofmt will line up the columns:
type T struct {
name string // name of the object
value int // its value
}
但是我不明白这怎么可能与 diff 和 VCSes 一起玩得很好。
例如,如果我换行:
confuzzabler int // doo doo be doo
然后运行一个diff,我应该得到这个:
2d1
< confuzzabler int // doo doo be doo
7d5
<
生活会很美好:差异显示唯一发生变化的行。
但是,如果我重新运行 gofmt,我会得到这个:
type T struct {
confuzzabler int // doo doo be doo
name string // name of the object
value int // its value
}
现在我重新运行 diff,我得到了这个:
2,4c2,3
< confuzzabler int // doo doo be doo
< name string // name of the object
< value int // its value
---
> name string // name of the object
> value int // its value
7d5
<
这是一个非常困惑和误导的 diff 输出,因为只有一行发生了变化。
作为 Go 开发者,您如何处理这个问题?
最佳答案
$ diff --help|grep -i white
-b --ignore-space-change Ignore changes in the amount of white space.
-w --ignore-all-space Ignore all white space.
关于 VCS 的问题,如果您按照一些既定的约定自行格式化代码(假设这里的约定是 gofmt
遵循的),您将手动重新格式化该代码块中的空白与 gofmt
完全一样,并且此更改将被任何 VCS 计为更改。所以在这种情况下,我真的没有看到任何语义问题。如果您反而关心 VCS 提供的差异工具,您可能应该看看它们是否像上面提到的 GNU diff 那样支持忽略空白更改。 FWIW git diff
使用相同的 -b
命令行选项支持这一点。
关于version-control - Go 的 gofmt 和 diff/VCS 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348548/
我正在使用带有 go 版本 go1.13.1 linux/amd64 的 Vim 版本 8.1.1401。我试图禁止 gofmt 将所有 if 语句括号放在新行上,例如: if thing { ret
我想将 gofmt 添加到 CI/CD 管道中。如果它产生变化,我希望 gofmt 以状态 1 退出。 例如,如果我运行 gofmt -s -l . 并且列出了一些文件。我希望它以状态 1 退出。现在
当使用 gofmt 格式化 go 源代码时,它会保留换行符,以便您可以将项目组合在一起。我对这实际上是如何实现的很感兴趣。我试着查看 github repo golang/go 中的源代码,但无法立即
我使用的是 iMac 27'' 2013 年末机型,我想针对 my package 运行 gofmt 工具. 我是这样调用它的: iMacs-Image:sergiotapia ~/smitego $
我正在尝试做 gofmt重写以特定前缀开头的所有包。像这样的东西: gofmt -r 'github.com/some/path/ -> someotherrepo.com/some/path/' 显
gofmt 命令不格式化花括号 ({})。 代码: package main import "fmt" func main() { fmt.Printf("Hello, world\n") }
如果你有这样的代码:func MyFunc(a int, b int) gofmt 重写规则能否将其更改为:func MyFunc(a, b int) 我试过:gofmt -r "f(x t, y t
在我正在维护的 go HTTP 服务器中,使用 VS Code 作为我的 IDE - gofmt 命令会在文件保存时执行,但它不遵守我引入的手动对齐为了可读性。 例如,我的代码如下: subRoute
我使用 go 1.6,我喜欢使用单引号。完成文件编辑后,我想在我的终端中使用 gofmt 替换它们,但没有任何效果。 gofmt -r "'->\"" book.go parsing
gofmt 命令支持 -r 标志以在格式化代码期间使用重写规则。如何使用它来将 制表符缩进 替换为 空格缩进? 最佳答案 Go 的格式由 gofmt 强制要求使用制表符缩进。另请参阅导致它的决定: h
我想我的 gofmt 没有正常工作,对吗? 原始文件: package main import "fmt" func main() { fmt.Printf("hello, world\n")
发布 'generate'工具开辟了很多令人兴奋的可能性。我一直在努力使我的测试更好。我有一个查询外部 API 的函数,该 API 的位置在全局变量中定义。难题之一是将该值替换为在“生成时”确定的值。
我正在试验 gofmt 工具的重构功能 go基于此的代码blog post ,我有一个简单的例子: package main import ( "fmt" ) var v = 12 func
我将 IntelliJ 与 Golang 插件一起使用。是否可以将 IDE 配置为在文件保存时执行 gofmt? 最佳答案 当然可以。 安装File Watchers plugin 打开“Prefer
安装 gofmt 包后,我在 Sublime Text 中不断收到此错误: Traceback (most recent call last): File "/Users/abrahma/Libr
我遇到了一个项目,它的 gitlab-ci.yml 中有这一行 go fmt $(go list ./... | grep -v/vendor/)接下来是 go test,然后是 go build。
我看到有 gofmt 和 go fmt。 gofmt 和 go fmt 有什么区别? 最佳答案 运行 go help fmt 来查看区别。简而言之,go fmt 在参数指定的包上运行 gofmt -l
我正在使用 go:generate 处理自动生成一些数据库模型,我希望通过 gofmt 运行我的 go 模板,但它被所有额外的 {{ ... }} 动态部分。 我是否遗漏了一些明显的东西?我希望这是
我正在编写输出其他 Go 代码的 Go 代码。 我想知道是否有一种方法可以调用 gofmt 工具来从完成编写的代码中格式化我编写的代码。 我在 gofmt 上找到的文档,例如the official
我正在尝试使用 Emacs 进行 golang 编程。我下载了 go-mode 包并安装了它。我的 .emacs 是: (require 'go-mode) 当我打开 *.go 文件时,go-mode
我是一名优秀的程序员,十分优秀!