Ці ёсць ўтыліта каманднага радка ў Golang толькі праверыць сінтаксіс майго зыходнага кода?

Напрыклад ёсць -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?

пастскрыптум Прыклад Рубі толькі таму, што я ведаю яго ў Ruby. Ці не з-за тролінг ці нешта.

9

9 адказы

Вы можаце выкарыстоўваць gofmt , каб праверыць на наяўнасць памылак сінтаксісу без фактычнага пабудовы праекта.

gofmt -e my_file.go

<�Код> -e параметр вызначаецца як:

<�Р> справаздачу аб усіх памылках (а не толькі першыя 10 на розных лініях)

gofmt --help

usage: gofmt [flags] [path ...]
  -comments=true: print comments
  -cpuprofile="": write cpu profile to this file
  -d=false: display diffs instead of rewriting files
  -e=false: report all errors (not just the first 10 on different lines)
  -l=false: list files whose formatting differs from gofmt's
  -r="": rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')
  -s=false: simplify code
  -tabs=true: indent with tabs
  -tabwidth=8: tab width
  -w=false: write result to (source) file instead of stdout
23
дададзена
Існуе таксама ісці ветэрынара і golint якія прымаюць яшчэ больш глыбокі погляд на ваш код.
дададзена аўтар TheHippo, крыніца
OK гэта на самай справе працуе на другой праверкі, трэба проста перанакіраваць стандартны вывад у/DEV/нуль, як gofmt -e file.go>/DEV/нуль
дададзена аўтар ekerner, крыніца
Добра, я зрабіў Вар'яты Trains адказ на бен UTIL скрыпт, калі ласка, пракруціць ўніз, каб знайсці яго. Працуе як: .. <�Код> gochk апрацоўшчыкі/* ідуць крамы/* перайсці
дададзена аўтар ekerner, крыніца
Гэта на самай справе не паведамляць пра ўсе памылкі, якія ісці пабудаваць можа так не прыдатны адказ.
дададзена аўтар Ash Berlin-Taylor, крыніца

Рубін з'яўляецца інтэрпрэтаванай мовай, так каманда, якая правярае сінтаксіс можа мець сэнс (таму што я мяркую, што вы маглі б патэнцыйна запусціць праграму, нават калі ёсць сінтаксічныя памылкі ў нейкі момант).

Перайсці на іншага боку, гэта кампіляваная мова, таму ён не можа працаваць на ўсіх, калі ёсць сінтаксічныя памылкі. Такім чынам, самы просты спосаб даведацца, калі ёсць памылкі, каб пабудаваць праграму з ісці пабудаваць .

3
дададзена
@amon, я на самой справе не пісаць нічога пра байткод або опкодах, проста вылучаючы розніцу паміж інтэрпрэтаванай і скампіляваным мовай. У мове, як PHP, можа патэнцыйна быць ўключыць заяву ў любым пункце кода. Нават калі ёсць памылка сінтаксісу ў прыкладаемым файле, праграма будзе працаваць выдатна, пакуль ён не дасягне гэтага файла, у гэты момант ён будзе ўрэзацца.
дададзена аўтар this.lau_, крыніца
Гэта вельмі адрозніваецца ад скампіляванага мовы, які будзе цалкам ператвораны ў байткод перад пакараннем смерцю. Такім чынам, няма ніякай неабходнасці «праверыць сінтаксіс» скампіляванага мовы - калі ён будуе гэта нармальна, калі не адбылася памылка. Інтэрпрэтаваная мова, аднак можа працаваць і да гэтага часу ёсць сінтаксічныя памылкі, таму дадатковы -c сцяг мае сэнс для ruby (так як я мяркую, ён будзе правяраць поўнае зыходнае дрэва, як фактычны кампілятар), але не для скампіляваных моў (якія ўжо ёсць кампілятар).
дададзена аўтар this.lau_, крыніца
Гэта фактычна няправільна. Усе сучасныя інтэрпрэтаваная мова кампіляваць ў прамежкавае ўяўленне (байткод/​​Opcodes), якія затым інтэрпрэтуюцца. Гэта не нейкі старажытны BASIC, дзе кожны радок апрацоўваецца кожны раз, перш чым яна будзе выканана. <�Код> -c ( «кампіляваць») варыянт толькі прадухіляе скампіляваць прадстаўленне ад запушчанага, такім чынам, паводзіць сябе як звычайны кампілятар з выхадам адрасаванага /DEV/Null </кодам>.
дададзена аўтар amon, крыніца

Рубін з'яўляецца інтэрпрэтаванай мовай, так каманда, якая правярае сінтаксіс можа мець сэнс (таму што я мяркую, што вы маглі б патэнцыйна запусціць праграму, нават калі ёсць сінтаксічныя памылкі ў нейкі момант).

Перайсці на іншага боку, гэта кампіляваная мова, таму ён не можа працаваць на ўсіх, калі ёсць сінтаксічныя памылкі. Такім чынам, самы просты спосаб даведацца, калі ёсць памылкі, каб пабудаваць праграму з ісці пабудаваць .

3
дададзена
@amon, я на самой справе не пісаць нічога пра байткод або опкодах, проста вылучаючы розніцу паміж інтэрпрэтаванай і скампіляваным мовай. У мове, як PHP, можа патэнцыйна быць ўключыць заяву ў любым пункце кода. Нават калі ёсць памылка сінтаксісу ў прыкладаемым файле, праграма будзе працаваць выдатна, пакуль ён не дасягне гэтага файла, у гэты момант ён будзе ўрэзацца.
дададзена аўтар this.lau_, крыніца
Гэта вельмі адрозніваецца ад скампіляванага мовы, які будзе цалкам ператвораны ў байткод перад пакараннем смерцю. Такім чынам, няма ніякай неабходнасці «праверыць сінтаксіс» скампіляванага мовы - калі ён будуе гэта нармальна, калі не адбылася памылка. Інтэрпрэтаваная мова, аднак можа працаваць і да гэтага часу ёсць сінтаксічныя памылкі, таму дадатковы -c сцяг мае сэнс для ruby (так як я мяркую, ён будзе правяраць поўнае зыходнае дрэва, як фактычны кампілятар), але не для скампіляваных моў (якія ўжо ёсць кампілятар).
дададзена аўтар this.lau_, крыніца
Гэта фактычна няправільна. Усе сучасныя інтэрпрэтаваная мова кампіляваць ў прамежкавае ўяўленне (байткод/​​Opcodes), якія затым інтэрпрэтуюцца. Гэта не нейкі старажытны BASIC, дзе кожны радок апрацоўваецца кожны раз, перш чым яна будзе выканана. <�Код> -c ( «кампіляваць») варыянт толькі прадухіляе скампіляваць прадстаўленне ад запушчанага, такім чынам, паводзіць сябе як звычайны кампілятар з выхадам адрасаванага /DEV/Null </кодам>.
дададзена аўтар amon, крыніца

Ці ёсць шмат пункту толькі праверка сінтаксісу? Кампілятар Go настолькі хутка, вы можаце таксама сабраць усе таксама.

У гэтым сэнсе асноўная ментальная мадэль цалкам адрозніваецца ад Ruby.

Just use go build or go install. http://golang.org/cmd/go/

2
дададзена
Чаму вы хочаце загрузіць, здзейсніць, разгарнуць ці марнаваць час на тое, што будаўніцтва яшчэ не скампіляваны яшчэ? Гэта свайго роду-кропкі. <�Код> ісці інструмент робіць праверку сінтаксісу і кампіляцыі вельмі хутка, так што няма нічога, каб быць дасягнута пры наяўнасці "толькі" праверкі сінтаксісу. Пры кампіляцыі ўдалася, а затым загрузіць, здзейсніць, разгортванне і г.д. да зместу вашага сэрца.
дададзена аўтар Rick-777, крыніца
Большую частку часу вы не хочаце, каб загрузіць, здзейсніць, разгарнуць ці марнаваць час пабудаваць нешта з няправільным сінтаксісам. Праверка сінтаксісу будзе зроблена, перш чым рабіць якія-небудзь з вышэй.
дададзена аўтар Gustav, крыніца
У некаторых выпадках вы не можаце скампіляваць і пратэставаць усю праграму на вашым кампутары. Падумайце аб CAN-сеткі ў аўтамабілі, не тое, што лёгка праверыць на персанальным кампутары.
дададзена аўтар Gustav, крыніца

У адпаведнасці з @ Rick-777, я б настойліва рэкамендаваў выкарыстоўваць ісці пабудаваць . Ён выконвае дадатковыя праверкі, што ісці FMT няма (напрыклад: адсутнічае або непатрэбны імпарт).

Калі вы турбуецеся аб стварэнні двайковага кода ў вашым зыходным каталогу, вы заўсёды можаце ісці будаваць -о/DEV/Null , каб адмяніць выснову, што істотна зніжае ісці пабудаваць да тэст, што код будзе будаваць . Гэта прымушае вас сінтаксічную праверку, між іншым.

EDIT: звярніце ўвагу, што ісці пабудаваць не стварае двайковы файл пры стварэнні неасноўных пакетаў, так што вам не патрэбны параметр -o.

0
дададзена

<�Моцны> golang праверкі сінтаксісу

Змесціце наступны код у файл з імем gochk у бункернай дырэкторыі і CHMOD 0755 .

Then run gochk -- help

#!/bin/bash
#
# gochk v1.0 2017-03-15 - golang syntax checker - [email protected]
# 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 - [email protected]"; 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
[email protected]
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
0
дададзена

<�Моцны> golang праверкі сінтаксісу

Змесціце наступны код у файл з імем gochk у бункернай дырэкторыі і CHMOD 0755 .

Then run gochk -- help

#!/bin/bash
#
# gochk v1.0 2017-03-15 - golang syntax checker - [email protected]
# 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 - [email protected]"; 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
[email protected]
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
0
дададзена

Абноўлены адказ для тых, хто не хоча здавольвацца толькі праверкі з gofmt :

You can substitute gotype for go build to get just the front-end of the go compiler that validates both syntax and structure: https://godoc.org/golang.org/x/tools/cmd/gotype

Гэта параўнальнае ў хуткасці gofmt , але вяртае ўсе памылкі, якія вы хочаце атрымаць ад ісці пабудаваць .

Адзін нюанс у тым, што яна, як уяўляецца, патрабуе іншых пакетаў, каб быць ісці ўсталяваць рэдактар, у адваротным выпадку ён не знаходзіць іх. Не ведаю, чаму гэта.

0
дададзена

Абноўлены адказ для тых, хто не хоча здавольвацца толькі праверкі з gofmt :

You can substitute gotype for go build to get just the front-end of the go compiler that validates both syntax and structure: https://godoc.org/golang.org/x/tools/cmd/gotype

Гэта параўнальнае ў хуткасці gofmt , але вяртае ўсе памылкі, якія вы хочаце атрымаць ад ісці пабудаваць .

Адзін нюанс у тым, што яна, як уяўляецца, патрабуе іншых пакетаў, каб быць ісці ўсталяваць рэдактар, у адваротным выпадку ён не знаходзіць іх. Не ведаю, чаму гэта.

0
дададзена