go語言有沒有縮排

2022-12-01 22:01:32

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

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境: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語言有沒有縮排的詳細內容,更多請關注TW511.COM其它相關文章!