Go 言語にはインデントがあります。 Go 言語では、インデントは gofmt ツールを使用して直接フォーマットできます (gofmt はインデントにタブを使用します)。gofmt ツールは、標準スタイルのインデントと垂直方向の配置でソース コードをフォーマットし、必要に応じてコメントも再フォーマットします。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
Go 言語コードのスタイル
(1) インデントと改行
インデントgofmt ツールを使用して直接フォーマットします (gofmt はタブ インデントを使用します)。 gofmt は、インデントと垂直方向の配置の標準スタイルでソース コードをフォーマットするツールで、必要に応じてコメントも再フォーマットされます。
改行に関しては、1 行の最大長は 120 文字を超えてはなりません。それを超える場合は、改行を使用して表示し、形式を維持するようにしてください。
GoLand 開発ツールでショートカット キーを直接使用します: Ctrl Alt L 以上です。
(2) 文の終わり
Go言語ではJavaのようなセミコロンで終わる必要はなく、デフォルトでは1行が1行です。データの一部。
同じ行に複数のステートメントを記述する場合は、それらのステートメントを使用する必要があります。
(3) 括弧とスペース
括弧とスペースに関しては、gofmt ツールを直接使用して書式設定することもできます (go は、左括弧を強制的に強制的にフォーマットしません)ラップすると、改行によって構文エラーが報告されます)、すべての演算子とオペランドの間にはスペースを入れてください。
//正确的方式 if a > 0 { } //错误的方式 if a>0 // a,>,0之间应该使用空格 { //左大括号不可以换行,会报语法错误 }
(4) インポート仕様
複数行のインポートの場合、 goimports が自動的にフォーマットしてくれます。パッケージをファイルに導入すると、次の形式を使用することをお勧めします:
import { "fmt" }
パッケージに標準ライブラリ パッケージ、プログラム内部パッケージ、サードパーティ パッケージの 3 種類のパッケージが導入されている場合は、次の方法でパッケージを編成することをお勧めします。
inport{ "encoding/json" "strings" "myproject/models" "myproject/controller" "github.com/astaxie/beego" }
パッケージを順番に紹介します。さまざまなタイプはスペースで区切られています。1 つ目は実際の準ライブラリ、2 つ目はプロジェクト パッケージ、3 つ目はサードパーティ パッケージです。 [関連する推奨事項: Go ビデオ チュートリアル ]
プロジェクトにパッケージを導入するために相対パスを使用しないでください
(5) エラー処理
エラー処理の原則は、err を返す呼び出しは破棄できないということです。_discard は使用しないでください。すべて処理する必要があります。エラーを受信した場合は、err を返すか、ログを使用してそれを記録します。
できるだけ早く返す: エラーが発生したら、すぐに戻ります
自分が何をしているのかわからない場合は、パニックを起こさないようにしてください。
// 错误写法 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 ソース コードをフォーマットするために使用される単一のコマンドです。インデントにはタブを使用し、位置合わせにはスペースを使用します。配置は、エディターが固定幅フォントを使用していることを前提としています。パスが明示的に指定されていない場合は、標準入力が処理され、ファイルが指定された場合はそのファイルが処理され、フォルダーが指定された場合は、フォルダー内のすべての .go ファイル (隠しファイルを除く) が再帰的に処理されます。デフォルトでは、gofmt は (ソース ファイルを直接更新するのではなく) 再フォーマットされたコードを標準出力に出力します。 使用法は次のとおりです:gofmt [flags] [path ...]
pattern -> replace
当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 中国語 Web サイトの他の関連記事を参照してください。