• 技术文章 >后端开发 >Golang

    go语言有没有缩进

    青灯夜游青灯夜游2022-12-01 18:54:57原创2488

    go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

    本教程操作环境: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记录下来

    // 错误写法
    if err != nil {
    	// error handing
    } else {
    	//normal code
    }
    
    // 正确写法
    if err != nil {
    	// error handing
    	return // or continue, etc.
    }
    //  normal code

    (6)测试

    单元测试文件命名规范为 example_test.go

    测试用例的函数名称都必须以Test

    每个重要的函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试

    go语言的gofmt命令

    gofmt是一个单独的命令,用来格式化Go的源代码。它用制表符(tab)进行缩进,空格进行对齐。对齐假定编辑器使用的是等宽字体。如果没有显式指定路径,它将处理标准输入;给定一个文件,它将处理该文件;给定一个文件夹,他将递归处理该文件夹下的所有.go文件(隐藏文件除外)。默认情况下,gofmt会将重新格式化好的代码打印至标准输出(而不是直接更新源文件)。

    用法如下:

    gofmt [flags] [path ...]

    flags如下:

    调试支持:

    注意:-r标识指定的重写规则必须是一个字符串形式:pattern -> replacement

    pattern和replacement部分必须是一个有效的Go表达式。在pattern中,单字符小写标识符用作匹配任意子表达式的通配符,这些表达式将替换为replacement中相同的标识符。

    当gofmt从标准输入读取时,即接受一个完整的Go程序,也可以是一个程序片段。程序片段必须是语法上有效的声明列表,语句列表或表达式。格式化这种片段时,gofmt会保留前导缩进和前后的空格,以便Go程序的各个部分可以通过gofmt来格式化。

    示例

    假设源文件(hello.go)内容如下:

    package main
    
    import "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)
    }

    1.检查文件中不必要的括号(如果有,则输出文件名):

    gofmt -r '(a) -> a' -l *.go

    将会输出hello.go

    2.移除括号:

    gofmt -r '(a) -> a' -w *.go

    源文件将变成如下格式:

    package main
    
    import "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时,将尽可能进行以下转换:

    以下数组,切片或映射的复合字面量形式:

        []T{T{}, T{}}

    将被简化为:

        []T{{}, {}}

    以下切片表达式形式:

        s[a:len(s)]

    将被简化为:

        s[a:]

    以下range形式:

        for x, _ = range v {...}

    将被简化为:

        for x = range v {...}

    以下range形式:

        for _ = range v {...}

    将被简化为:

        for range v {...}

    注意:这些改变可能与早期版本的Go不兼容。另外,官方文档中指出:

    更多编程相关知识,请访问:编程视频!!

    以上就是go语言有没有缩进的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:go语言 Golang Go
    上一篇:go语言是后端语言吗 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言有反射吗• go语言支持什么函数• 一文浅析Golang中的数组• go-dongle 0.1.4 版本发布啦!看看有哪些功能!• go语言有微服务框架吗• go语言和c语言在指针上有什么区别
    1/1

    PHP中文网