ホームページ >バックエンド開発 >Golang >Go言語にはインデントがありますか?

Go言語にはインデントがありますか?

青灯夜游
青灯夜游オリジナル
2022-12-01 18:54:576633ブラウズ

Go 言語にはインデントがあります。 Go 言語では、インデントは gofmt ツールを使用して直接フォーマットできます (gofmt はインデントにタブを使用します)。gofmt ツールは、標準スタイルのインデントと垂直方向の配置でソース コードをフォーマットし、必要に応じてコメントも再フォーマットします。

Go言語にはインデントがありますか?

このチュートリアルの動作環境: 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 ...]

フラグは次のとおりです:

  • -d 再フォーマットされたコードは標準出力に出力されなくなります。ファイルのコード形式が gofmt と一致しない場合は、相違点を標準出力に出力します (このフラグは git diff コマンドに似ています)。

  • -e すべてのエラー (誤ったエラーも含む) を出力します。

  • -l 再フォーマットされたコードは標準出力に出力されなくなりました。ファイルのコード形式が gofmt と一致しない場合は、ファイル名を標準出力に出力します。

  • -r ルール ソース ファイルを再フォーマットする前に、指定された書き換えルールを適用します。

  • -s ルール (存在する場合) を適用した後、コードを簡素化してみてください。

  • -w 再フォーマットされたコードは標準出力に出力されなくなりました。ファイルのコード形式が gofmt と一致しない場合は、gofmt バージョンを使用して書き換えてください。書き換え処理中にエラーが発生した場合は、自動バックアップを使用して元のファイルが復元されます。

デバッグ サポート:

  • -cpuprofile filename cpuprofile を指定されたファイルに書き込みます。

注: -r フラグで指定される書き換えルールは、文字列の形式である必要があります:

pattern -> replace

patternおよび置換パーツ 有効な Go 式である必要があります。 pattern では、単一文字の小文字の識別子が、置換時に同じ識別子で置き換えられる部分式と一致するワイルドカードとして使用されます。

当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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。