本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。
go语言的代码风格
(资料图片仅供参考)
(1)缩进和折行
缩进直接使用gofmt工具格式化即可(gofmt是使用tab缩进的)。gofmt该工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。
折行方面,一行最长不超过120个字符,超过的请使用换行展示,尽量保持格式优雅
我们使用GoLand开发工具,直接使用快捷键:Ctrl+Alt+L即可。
(2)语句的结尾
Go语言中是不需要类似于Java需要分号结尾,默认一行就是一条数据。
如果你打算将多个语句写在同一行,它们则必须使用。
(3)括号和空格
括号和空格方面,也可以直接使用gofmt 工具格式化(go会强制左大括号不换行,换行会报语法错误),所有的运算符和操作数之间要留空格。
//正确的方式if a > 0 {}//错误的方式if a>0 // a,>,0之间应该使用空格{ //左大括号不可以换行,会报语法错误}
登录后复制
(4)import规范
import在多行的情况下,goimports会自动帮你格式化,如果你在一个文件里面引入了一个package,建议采用如下格式:
import {"fmt"}
登录后复制
如果你的包引入了三种类型的包,标准库包,程序内部包,第三方包,建议采用如下方式进行组织你的包
inport{"encoding/json""strings""myproject/models""myproject/controller""github.com/astaxie/beego"}
登录后复制
有顺序的引入包,不同的类型采用空格分隔,第一种实际准库,第二是项目包,第三是第三方包。【相关推荐:Go视频教程】
在项目中不要使用相对路径引入包
(5)错误处理
错误处理的原则就是不能丢弃任何有返回err的调用,不要使用_丢弃,必须全部处理。接收到错误,要么返回err,或者使用log记录下来
尽早return:一旦有错误发生,马上返回
尽量不使用panic,除非你知道你在做什么
错误描述如果是英文必须为小写,不需要标点结尾
采用独立的错误流进行处理
// 错误写法if err != nil {// error handing} else {//normal code}// 正确写法if err != nil {// error handingreturn // or continue, etc.}// normal code
登录后复制
(6)测试
单元测试文件命名规范为 example_test.go
测试用例的函数名称都必须以Test
每个重要的函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试
go语言的gofmt命令
gofmt是一个单独的命令,用来格式化Go的源代码。它用制表符(tab)进行缩进,空格进行对齐。对齐假定编辑器使用的是等宽字体。如果没有显式指定路径,它将处理标准输入;给定一个文件,它将处理该文件;给定一个文件夹,他将递归处理该文件夹下的所有.go文件(隐藏文件除外)。默认情况下,gofmt会将重新格式化好的代码打印至标准输出(而不是直接更新源文件)。
用法如下:
gofmt [flags] [path ...]
登录后复制
flags如下:
-d 重新格式化后的代码不再打印至标准输出。如果文件代码格式与gofmt不一致,打印区别至标准输出(该标识类似git的diff命令)。
-e 打印所有的错误(包括假的)。
-l 重新格式化后的代码不再打印至标准输出。如果文件代码格式与gofmt不一致,打印该文件名至标准输出。
-r rule 重新格式化源文件前应用指定的重写规则。
-s 在应用规则后(如果有的话),尝试简化代码。
-w 重新格式化后的代码不再打印至标准输出。如果文件代码格式与gofmt不一致,使用gofmt的版本进行重写。重写过程中如果出现错误,原始文件将使用自动备份进行还原。
调试支持:
-cpuprofile filename 将cpuprofile写入到指定的文件。
注意:-r标识指定的重写规则必须是一个字符串形式:pattern -> replacement
pattern和replacement部分必须是一个有效的Go表达式。在pattern中,单字符小写标识符用作匹配任意子表达式的通配符,这些表达式将替换为replacement中相同的标识符。
当gofmt从标准输入读取时,即接受一个完整的Go程序,也可以是一个程序片段。程序片段必须是语法上有效的声明列表,语句列表或表达式。格式化这种片段时,gofmt会保留前导缩进和前后的空格,以便Go程序的各个部分可以通过gofmt来格式化。
示例
假设源文件(hello.go)内容如下:
package mainimport "fmt"func main() { x := 2y := 3// 该行未对齐 str := "Hello Golang~" var greeting string greeting = (str)// 本行含有不必要的括号 fmt.Println(greeting) fmt.Println("x*y =", ((x) * y))// 本行含有不必要的括号 s := []int{1, 3, 5, 6, 7}// 切片 start := 2 sub := s[start:len(s)]// 本行可以优化切片s上界 fmt.Println(s) fmt.Println(sub)}
登录后复制
1.检查文件中不必要的括号(如果有,则输出文件名):
gofmt -r "(a) -> a" -l *.go
登录后复制
将会输出hello.go
2.移除括号:
gofmt -r "(a) -> a" -w *.go
登录后复制
源文件将变成如下格式:
package mainimport "fmt"func main() { x := 2 y := 3 // 该行未对齐 str := "Hello Golang~" var greeting string greeting = str // 本行含有不必要的括号 fmt.Println(greeting) fmt.Println("x*y =", x*y) // 本行含有不必要的括号 s := []int{1, 3, 5, 6, 7} // 切片 start := 2 sub := s[start:len(s)] // 本行可以优化切片s上界 fmt.Println(s) fmt.Println(sub)}
登录后复制
3.当前目录下,从显式切片上界转换为隐式切片上界:
gofmt -r "α[β:len(α)] -> α[β:]" -w ./
登录后复制
源文件第22行将变成如下:
sub := s[start:] // 本行可以优化切片上限
登录后复制
代码简化
使用-s调用gofmt时,将尽可能进行以下转换:
注意:这些改变可能与早期版本的Go不兼容。另外,官方文档中指出:
-r标识性能有点慢;
-w如果失败,还原后的源文件可能会丢失某些文件属性。
更多编程相关知识,请访问:编程视频!!
以上就是go语言有没有缩进的详细内容,更多请关注php中文网其它相关文章!