当前位置: 首页 > news >正文

【golang学习笔记】——(五)Go格式化统一代码风格

        我们在入职一家新公司的时候,除了要学习公司的流程规范和规章制度,还会做的一件事情就是进行公司编码规范的学习,基于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 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

-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 "fmt"func 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 "fmt"func 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!")

http://www.lryc.cn/news/61014.html

相关文章:

  • CAD转SHP最好的方法 赶快收藏起来吧
  • PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor
  • TCP和UDP通信对比
  • SpringCloud:ElasticSearch之自动补全
  • TOOM解析如何搭建一套适合自己的舆情监测系统?完整的实战指南
  • 技术分享 | OceanBase 手滑误删了数据文件怎么办
  • windows上Git Bash支持常用命令gcc tree zip wget cmake ninja
  • 面试题30天打卡-day10
  • 【python】制作一个简单的界面,有手就行的界面~
  • 基于RK3568的Linux驱动开发—— GPIO知识点(二)
  • item_get-获得aliexpress商品详情API的调用参数说明
  • 【Python_Scrapy学习笔记(三)】Scrapy框架之全局配置文件settings.py详解
  • spark读写时序数据库 TDengine 错误总结
  • Web中间件常见漏洞
  • Python Web 深度学习实用指南:第三部分
  • C#基础学习--预处理指令
  • Spring Boot 接口加解密
  • 大公司为什么禁止SpringBoot项目使用Tomcat?
  • 2023年第十三届MathorCup高校数学建模挑战赛|A题|量子计算机在信用评分卡组合优化中的应用
  • linux下搭建Hbase分布式数据库
  • unity,射手游戏
  • 摒弃单一变现手段,开拓多元商业模式,破解场景单一APP盈利难题!
  • JavaEE-轻松了解网络原理之TCP协议
  • 薪资17K是一个怎样的水平?来看看98年测试工程师的面试全过程…
  • OpenCV3 和 Qt5 计算机视觉:11~12
  • R包编写流程
  • 试验GPT写文章书
  • class与typename的异同
  • OpenCV 图像处理学习手册:6~7
  • Java中的序列化与反序列化(一)