四川交投建设工程股份有限公司网站,海报生成器,做网站合同范本,辽宁省工程造价信息网我们在入职一家新公司的时候#xff0c;除了要学习公司的流程规范和规章制度#xff0c;还会做的一件事情就是进行公司编码规范的学习#xff0c;基于google的C规范下#xff0c;做了各自的发散和规范#xff0c;久而久之就是包罗万象的样子#xff0c;疲于应付各种规范约… 我们在入职一家新公司的时候除了要学习公司的流程规范和规章制度还会做的一件事情就是进行公司编码规范的学习基于google的C规范下做了各自的发散和规范久而久之就是包罗万象的样子疲于应付各种规范约束但是代码的规范统一是有必要的至少从代码的可读性和干净度上是让人舒适的否则会很头大。go语言为了能减少因为代码风格不统一而专门制作了一个开发工具gofmt这个工具可以将开发的源码格式化成符合官方制定的统一代码风格。对于go的开发者来说每次提交开发的源码之前进行一次格式化是一个好的开发习惯。如果接收一个已经开发中或者开发完成的项目晦涩难读的代码让你很难到达高效的熟悉代码和业务那先进行gofmt会是一个很好的解决办法。 1、gofmt参数 usage: gofmt [flags] [path ...]-cpuprofile stringwrite cpu profile to this file-d display diffs instead of rewriting files-e report all errors (not just the first 10 on different lines)-l list files whose formatting differs from gofmts-r stringrewrite rule (e.g., a[b:len(a)] - a[b:])-s simplify code-w write result to (source) file instead of stdout -cpuprofile :将CPU配置文件写入该文件 -d只把改写前后内容的对比信息作为结果打印到标准输出。而不是把改写后的全部内容都打印到标准输出。 -e: 打印所有的语法错误到标准输出。如果不使用此标记则只会打印每行的第 1 个错误且只打印前 10 个错误。 -l仅把那些不符合格式化规范的、需要被命令程序改写的源码文件的绝对路径打印到标准输出。而不是把改写后的全部内容都打印到标准输出。 -r添加形如“a[b:len(a)] - a[b:]”的重写规则。如果我们需要自定义某些额外的格式化规则就需要用到它。 -s简化文件中的代码。 -w把改写后的内容直接写入到文件中而不是作为结果打印到标准输出。 2、gofmt的使用 2.1 对文件的格式化 将文件进行格式化后写入到文件 gofmt -w test.go 同时该命名还支持模糊匹配 gofmt -w *.go 将当前目录下所有的.go源文件进行格式化并写入文件。 但是要注意gofmt只能帮助让合法的代码规范化并不能解决在编码中的错误语法。 例如有如下代码 package main
import fmt
func main()
{
fmt.Println(hello word!)
} L4行的{按照编码规范要求必须放到L3行的main函数声明后但是当前的编码是错误的如果执行gofmt命令进行格式化则会报错 C:\project\hello.go:6:1: unexpected semicolon or newline before { 对目录的格式化 对goproject目录下包含其子目录下所有的.go源文件进行格式化并重写 gofmt goproject 重写规则的使用 例如有如下代码 package mainimport fmtfunc main() {a : 1b : 2c : a bfmt.Println(c)} 执行-r重写规则 gofmt -w -r a b - b a test.go 或 gofmt -r a b - b a -w test.go 则代码会变成 package mainimport fmtfunc main() {a : 1b : 2c : b afmt.Println(c)} 这里需要注意gofmt的参数执行是有规则的不能是只把需要的参数直接在后面累加输入就可以正确执行的如果输入为 gofmt -r -w a b - b a test.go 会报如下错误 rewrite rule must be of the form pattern - replacement 且要注意gofmt 使用 tab 来表示缩进对行的长度无限制如果手动对代码进行了换行gofmt 不会强制把代码格式化回一行保持原来手动换行的现状 例如手动换行如下代码为 fmt.Println(hello word!) 换行为 fmt.Println (hello word!) 执行格式化后任然是 fmt.Println (hello word!)