首頁 >後端開發 >Golang >go語言有沒有縮排

go語言有沒有縮排

青灯夜游
青灯夜游原創
2022-12-01 18:54:576636瀏覽

go語言有縮排。在go語言中,縮排直接使用gofmt工具格式化即可(gofmt使用tab進行縮排);gofmt工具會以標準樣式的縮排和垂直對齊方式對原始程式碼進行格式化,甚至必要情況下註解也會重新格式化。

go語言有沒有縮排

本教學操作環境: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 handing
    	return // 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 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不兼容。另外,官方文档中指出:

  • -r标识性能有点慢;

  • -w如果失败,还原后的源文件可能会丢失某些文件属性。

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

以上是go語言有沒有縮排的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn