侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

go语言中代码格式化工具-gofmt详解

Go  /  管理员 发布于 3年前   4040

Golang的开发团队制定了统一的官方代码风格,

并且推出了gofmt工具(gofmt或go fmt)来帮助开发者格式化他们的代码到统一的风格。

gofmt是一个cli程序,会优先读取标准输入,如果传入了文件路径的话,会格式化这个文件,

如果传入一个目录,会格式化目录中所有.go文件,如果不传参数,会格式化当前目录下的所有.go文件。


使用方法:

单文件: gofmt -l -w  test.go

整个工程:gofmt -l -w /root/go_project


gofmt下载

gofmt 在 go安装包中

go安装包下载地址:https://studygolang.com/dl   注意最好下载安装包不是源码包

go linux 当前最新版本安装包下载地址:

https://studygolang.com/dl/golang/go1.12.7.linux-amd64.tar.gz


下载解压

wget https://studygolang.com/dl/golang/go1.12.7.linux-amd64.tar.gztar -C /usr/local -xzf go1.12.7.linux-amd64.tar.gz

即可发现gofmt 如图:

1.png

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[flags][path…]-cpuprofile字符串    将cpu配置文件写入此文件-d 显示差异而不是重写文件-e 报告所有错误(不只是不同行的前10个错误)-l 列出格式与gofmt不同的文件-R 字符串    重写规则(例如“a[b:len(a)]->a[b:'')-S 简化代码-w 将结果写入(源)文件而不是stdout


可以看到,gofmt命令还支持自定义的重写规则,使用-r参数,按照pattern -> replacement的格式传入规则。


有如下内容的Golang程序,存储在main.go文件中。

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


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

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


格式化的结果如下。

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


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


go fmt和gofmt


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

usage: go fmt [-n] [-x] [packages]Fmt runs the command 'gofmt -l -w' on the packages namedby 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。



完


  • 上一条:
    go语言beego框架中实现无极限查找子孙树函数
    下一条:
    想知道自己电脑配置是否支持升级windows11?PC Health Check(电脑健康状况检查工具)了解一下
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-08
    • 2024-11
    • 2025-02
    • 2025-04
    • 2025-05
    • 2025-06
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客