全球球精选!go语言有没有缩进

时间:2022-12-01 18:58:06       来源:PHP中文网

本教程操作环境: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中文网其它相关文章!

关键词: 标准输出 不必要的 测试用例