1

gofmt コマンドは、花括弧 ({}) をフォーマットしません。

コード:

package main

import "fmt"

func main() 
{
    fmt.Printf("Hello, world\n")
}

gofmt hello.go の出力

hello.go:6:1: 予期される宣言、見つかった '{' 終了ステータス 2

スペースをどこかに置くと、適切にフォーマットされます。gofmt はブレースをフォーマットしませんか?

4

3 に答える 3

6

関数宣言の同じ行に中括弧を配置する必要があります。そうしないと、この構文エラーのためにコードがコンパイルされません

中括弧はあるのにセミコロンがないのはなぜですか? そして、次の行に左中括弧を配置できないのはなぜですか?

Go では、ステートメントのグループ化に中かっこを使用します。これは、C ファミリーの任意の言語を使用したことのあるプログラマーになじみのある構文です。ただし、セミコロンはパーサー用であり、人用ではないため、可能な限り削除したいと考えていました。この目標を達成するために、Go は BCPL からトリックを借りています。ステートメントを区切るセミコロンは形式的な文法にありますが、ステートメントの終わりになる可能性のある行の最後に、レクサーによって先読みなしで自動的に挿入されます。これは実際には非常にうまく機能しますが、ブレース スタイルを強制する効果があります。たとえば、関数の左中かっこは、単独で行に表示することはできません。

https://golang.org/doc/faq#semicolons

于 2016-07-22T06:59:41.047 に答える
3

あなたのコードには構文エラーがあります:関数宣言と同じ行に開き中括弧を入れてください。プログラムフラグメントは、gofmt を使用するために構文的に有効である必要があり
ます。

参照: https://golang.org/cmd/gofmt/ それは言う:

gofmt が標準入力から読み取る場合、完全な Go プログラムまたはプログラム フラグメントのいずれかを受け入れます。プログラム フラグメントは、構文的に有効な宣言リスト、ステートメント リスト、または式でなければなりません。このようなフラグメントをフォーマットする場合、gofmt は先頭のインデントと前後のスペースを保持するため、go プログラムの個々のセクションを gofmt を介してパイプすることでフォーマットできます。

于 2016-07-22T07:02:31.703 に答える
0

関数宣言と同じ行に開き中かっこを入れてください おそらくエディターに gofmt を追加する必要があります。コード形式の問題を回避できます

于 2016-07-23T02:56:02.047 に答える