美文网首页
Go代码格式化

Go代码格式化

作者: 北春南秋 | 来源:发表于2019-02-27 18:08 被阅读0次

  对于一门编程语言来说,代码格式化是最容易引起争议的一个问题,不同的开发者可能会有不同的编码风格和习惯,但是如果所有开发者都能使用同一种格式来编写代码,开发者就可以将宝贵的时间专注在语言要解决的问题上。

gofmt介绍

  Golang的开发团队制定了统一的官方代码风格,并且推出了gofmt工具(gofmt或go fmt)来帮助开发者格式化他们的代码到统一的风格。gofmt是一个cli程序,会优先读取标准输入,如果传入了文件路径的话,会格式化这个文件,如果传入一个目录,会格式化目录中所有.go文件,如果不传参数,会格式化当前目录下的所有.go文件。
  gofmt默认不对代码进行简化,使用-s参数可以开启简化代码功能,具体来说会进行如下的转换:

  • 去除数组、切片、Map初始化时不必要的类型声明:
如下形式的切片表达式:
    []T{T{}, T{}}
将被简化为:
    []T{{}, {}}
  • 去除数组切片操作时不必要的索引指定
如下形式的切片表达式:
    s[a:len(s)]
将被简化为:
    s[a:]
  • 去除迭代时非必要的变量赋值
如下形式的迭代:
    for x, _ = range v {...}
将被简化为:
    for x = range v {...}
如下形式的迭代:
    for _ = range v {...}
将被简化为:
    for range v {...}

gofmt命令参数列表如下:

usage: gofmt [flags] [path ...]
  -cpuprofile string
        write 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 gofmt's
  -r string
        rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')
  -s    simplify code
  -w    write result to (source) file instead of stdout

  可以看到,gofmt命令还支持自定义的重写规则,使用-r参数,按照pattern -> replacement的格式传入规则。
  有如下内容的Golang程序,存储在main.go文件中。

package main

import "fmt"

func main() {
   a := 1
   b := 2
   c := a + b
   fmt.Println(c)
}

  用以下规则来格式化上面的代码。

gofmt -r "a + b -> b + a"

  格式化的结果如下:

package main

import "fmt"

func main() {
   a := 1
   b := 2
   c := b + a
   fmt.Println(c)
}

  注意:Gofmt使用tab来表示缩进,并且对行宽度无限制,如果手动对代码进行了换行,gofmt也不会强制把代码格式化回一行。

go fmt和gofmt

  gofmt是一个独立的cli程序,而go中还有一个go fmt命令,go fmt命令是gofmt的简单封装。

kefins@localhost:~/gopath/src/iotest $ go help fmt
usage: go fmt [-n] [-x] [packages]

Fmt runs the command 'gofmt -l -w' on the packages named
by the import paths. It prints the names of the files that are modified.

For more about gofmt, see 'go doc cmd/gofmt'.
For more about specifying packages, see 'go help packages'.

The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.

To run gofmt with specific options, run gofmt itself.

See also: go fix, go vet.

  go fmt命令本身只有两个可选参数-n和-x,-n仅打印出内部要执行的go fmt的命令,-x命令既打印出go fmt命令又执行它,如果需要更细化的配置,需要直接执行gofmt命令。
  go fmt在调用gofmt时添加了-l -w参数,相当于执行了gofmt -l -w

相关文章

  • Golang goland idea+golint+go fmt

    一、Go的相关插件工具简介 golint 代码的风格检测 go fmt 重新格式化Go源代码 goimports ...

  • go fmt与gofmt命令

    go fmt命令会按照Go语言代码规范格式化指定代码包中的所有Go语言源码文件的代码,所有Go语言源码文件即包括命...

  • go 学习笔记

    go build、go install 和 go run 的区别 格式化代码 go get本质 初始化值 声明自定...

  • 格式化go代码文件

    用代码生成golang代码,不是格式化的,可以利用gofmt来格式化指定目录下的所有go代码文件

  • Goland go fmt 自动格式化插件添加

    Goland Go fmt 自动格式 插件添加 ​ 4.成功 5.保存代码时自动执行 go fmt 格式化代码

  • Golang入门-----安装配置篇

    #方法1:gofmt格式化$gofmt -w hello.go#方法2:goimports格式化代码,但是 goi...

  • Go 规范指南

    写完代码都必须格式化,保证代码优雅:gofmt goimports 编译前先执行代码静态分析:go vet pat...

  • goimpots 安装

    gofmt 保存的时候自动 格式化go代码goimports 保存的时候自动导入处理包,以及自动格式化 用来替代 ...

  • Goland辅助工具goimports和gomodules

    1、goimports工具 goimports工具是Go官方提供的一种工具,它能够为我们自动格式化 Go 语言代码...

  • Go代码格式化

      对于一门编程语言来说,代码格式化是最容易引起争议的一个问题,不同的开发者可能会有不同的编码风格和习惯,但是如果...

网友评论

      本文标题:Go代码格式化

      本文链接:https://www.haomeiwen.com/subject/akafuqtx.html