[解決済み] Golangで長い行を改行するには?
質問
Pythonから来た私は、80カラムより長いコード行を見るのに慣れていません。 だから、私はこれに遭遇したとき。
err := database.QueryRow("select * from users where user_id=?", id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
に分解してみました。
err := database.QueryRow("select * from users where user_id=?", id) \
.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
しかし、私は
syntax error: unexpected \
また、エンターキーで改行して、最後にセミコロンをつけてみました。
err := database.QueryRow("select * from users where user_id=?", id)
.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email);
しかし、I再び取得します。
syntax error: unexpected .
ということで、golangicな方法は何だろうと考えています。
どのように解決するのですか?
まず、背景を説明します。囲碁の正式な文法では、セミコロン
";"
を終端記号として使用しますが、Go プログラムではそのほとんどを省略することができます (そして、より明確で読みやすいソースを作成するためには省略すべきです)。
gofmt
は不要なセミコロンも削除します)。
仕様書には、正確なルールが記載されています。 仕様書 セミコロン。
<ブロッククオート形式文法では、多くのプロダクションでセミコロン ";" をターミネーターとして使用しています。Goプログラムでは、以下の2つのルールにより、これらのセミコロンのほとんどを省略することができます。
-
入力がトークンに分割されるとき、行の最後のトークンの直後にセミコロンが自動的に挿入されます(そのトークンが
-
複雑なステートメントが1行を占めるようにするために、閉じる ")" または "}" の前にセミコロンを省略することができます。
というわけで、括弧の後に改行文字を入れると、ご覧のように
)
の後に改行を入れると、セミコロン
;
が自動的に挿入されるため、次の行は前の行の続きとして扱われません。あなたの場合、このようなことが起こったので、次の行は
.Scan(&ReadUser.ID,...
で始まる次の行は、このように立っているとコンパイル時のエラーになります。
自体
(前の行なし)はコンパイルタイムエラーになります。
syntax error: unexpected .
というわけで、以下のルールに抵触しない任意の位置で改行することができます。
1.
に記載されているルールに抵触しない場所であれば、どのような箇所でも改行できます。
通常、コンマの後で改行します。
,
の後、あるいは
開
括弧 例
(
,
[
,
{
で、ドットの後に
.
のように、何らかの値のフィールドやメソッドを参照している可能性があります。また、二項演算子(2つのオペランドを必要とするもの)の後でも改行することができます。
i := 1 +
2
fmt.Println(i) // Prints 3
ここで注目すべきは、構造体やスライス、マップリテラルに初期値を列挙し、最後の値を列挙した後に改行したい場合、必須のコンマである
,
を付けなければなりません。
s := []int {
1, 2, 3,
4, 5, 6, // Note it ends with a comma
}
これはセミコロンの規則に合わせるためで、また、最後のコンマの追加や削除を気にせずに行を並べ替えたり新しい行を追加したりできるようにするためです。例えば、コンマを削除したり新たに追加したりせずに2行を単に入れ替えることができます。
s := []int {
4, 5, 6,
1, 2, 3,
}
関数呼び出しの引数を列挙する場合も同様です。
fmt.Println("first",
"second",
"third", // Note it ends with a comma
)
関連
-
go build error, error can't load package: package xxx is not in GOROOT (D:\basic_tool╱GoGoSrc╱)
-
Windowsのプロパティダイアログボックスのエンコーディングの問題 ファイル名、ディレクトリ名、ボリュームラベルの構文が正しくありません。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] YAML の文字列を複数行に渡って分割するには?
-
[解決済み] Bashで変数で定義された数値の範囲を反復処理するにはどうすればよいですか?
-
[解決済み] JavaScriptで浮動小数点数を整数に変換するには?
-
[解決済み] Pythonで改行(行継続)をするにはどうしたらいいですか?
-
[解決済み] 一重引用符で囲まれた文字列の一重引用符をエスケープするには
-
[解決済み] PowerShellでコードをコメントアウトする方法とは?
-
[解決済み] ゼロ終端のバイト配列を文字列に変換するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Goで配列を反転させるにはどうしたらいいですか?
-
[解決済み] ParseFormはいつ使うべきで、FormValueとPostFormValueはいつ使うべきですか?
-
[解決済み] Go パッケージは log.Fatal を使うべきですか、そしてそれはいつですか?
-
runnerw.exe: CreateProcess はエラー 216 で失敗しました。プロセスが終了し、終了コード 216 が表示された 実行するプロジェクトがこの例外をスローする
-
[解決済み] Golangで定数mapを宣言するには?
-
[解決済み] GOPATHとGOROOTの値はどうすればよいですか?
-
[解決済み】go getでインストールしたパッケージの削除について
-
[解決済み】なぜmake()やnew()をするのでしょうか?)
-
[解決済み】Goでディレクトリを一覧表示する
-
[解決済み】チャンネルを開いたままにしておいてもいいのでしょうか?