17

たとえば-c、Ruby には、コードを実行する前に構文をチェックするオプションがあります。

C:\>ruby --help
Usage: ruby [switches] [--] [programfile] [arguments]
-c              check syntax only

C:\>ruby -c C:\foo\ruby\my_source_code.rb
Syntax OK

Goにも同様の機能はありますか?

PS Rubyの例は、私がRubyで知っているからです。トローリングなどのせいではありません。

4

6 に答える 6

29

gofmtプロジェクトを実際にビルドしなくても、構文エラーをチェックするために使用できます。

gofmt -e my_file.go > /dev/null

後で $? を使用できます。bash 変数。戻りコード 0 は成功を意味し、2 は構文チェックを意味します。/dev/null はコードを食べますが、エラーは stderr に送られます

オプションは次の-eように定義されます。

すべてのエラーを報告します (異なる行の最初の 10 個だけではありません)


gofmt --help

使用法: gofmt [フラグ] [パス ...]
  -comments=true: コメントを出力します
  -cpuprofile="": このファイルに CPU プロファイルを書き込みます
  -d=false: ファイルを書き換える代わりに差分を表示します
  -e=false: すべてのエラーを報告します (異なる行の最初の 10 個だけではありません)。
  -l=false: gofmt とはフォーマットが異なるファイルを一覧表示します
  -r="": 書き換えルール (例: 'a[b:len(a)] -> a[b:]')
  -s=false: コードを簡素化
  -tabs=true: タブでインデント
  -tabwidth=8: タブ幅
  -w=false: stdout の代わりに (ソース) ファイルに結果を書き込みます
于 2013-05-31T18:02:55.097 に答える
3

構文をチェックするだけの意味はありますか? Go コンパイラは非常に高速なので、すべてをコンパイルすることもできます。

この意味で、根底にあるメンタル モデルは Ruby とはかなり異なります。

go buildまたはを使用するだけgo installです。http://golang.org/cmd/go/

于 2013-06-02T07:57:14.993 に答える
0

で確認するだけで解決したくない人のための更新された回答gofmt

代わりgotypego build、構文と構造の両方を検証する go コンパイラのフロントエンドのみを取得できます: https://godoc.org/golang.org/x/tools/cmd/gotype

と比べて速度は速いgofmtですが、 から得られるすべてのエラーを返しますgo build

1 つの注意点は、他のパッケージを ed にする必要があるように見えることですgo install。そうしないと、それらが見つかりません。これがなぜなのかわかりません。

于 2016-08-06T01:37:37.410 に答える
0

golang 構文チェッカー

以下のコードを、bin dir 内のgochkというファイルに配置しますchmod 0755

次に実行しますgochk -- help

#!/bin/bash
#
# gochk v1.0 2017-03-15 - golang syntax checker - ekerner@ekerner.com
# see --help

# usage and version
if \
    test "$1" = "-?" || \
    test "$1" = "-h" || \
    test "$1" = "--help" || \
    test "$1" = "-v" || \
    test "$1" = "--version"
then
    echo "gochk v1.0 2017-03-15 - golang syntax checker - ekerner@ekerner.com"; echo
    echo "Usage:"
    echo "  $0 -?|-h|--help|-v|--version # show this"
    echo "  $0 [ file1.go [ file2.go . . . ] ] # syntax check"
    echo "If no args passed then *.go will be checked"; echo
    echo "Examples:"
    echo "  $0 --help # show this"
    echo "  $0 # syntax check *.go"
    echo "  $0 cmd/my-app/main.go handlers/*.go # syntax check list"; echo
    echo "Authors:"
    echo "  http://stackoverflow.com/users/233060/ekerner"
    echo "  http://stackoverflow.com/users/2437417/crazy-train"
    exit
fi

# default to .go files in cwd
gos=$@
if test $# -eq 0; then
    gos=$(ls -1 *.go 2>/dev/null)
    if test ${#gos[@]} -eq 0; then
        exit
    fi
fi

# test each one using gofmt
# credit to Crazy Train at
# http://stackoverflow.com/questions/16863014/is-there-a-command-line-tool-in-golang-to-only-check-syntax-of-my-source-code
#
for go in $gos; do
    gofmt -e "$go" >/dev/null
done
于 2017-03-14T17:03:14.787 に答える