Shebangs を使用して Perl スクリプトを直接実行するのが好きです。
#!/usr/bin/env perl
Go プログラムのシバンとは何ですか?
私はこれを好みます:
///usr/bin/true; exec /usr/bin/env go run "$0" "$@"
これには、 の回答と比較していくつかの利点があります。
は、Go とシェルの構文を同時に有効にするという///usr/bin/true
偉業を達成します。Go ではコメントです。シェルでは、ノーオペレーション コマンドです。
exec
孫プロセスを起動する代わりに、新しいシェル プロセスを置き換えるために使用します。その結果、Go プログラムは直接の子プロセスになります。これはより効率的であり、デバッグや監視などの高度な状況でも重要です。
引数の適切な引用。スペースや特殊文字は問題になりません。
主要な///
ものは、単なる よりも標準に準拠してい//
ます。のみを使用する//
と、実装定義の動作に遭遇するリスクがあります。http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.htmlからの引用は次のとおりです。
パス名が 2 つの連続した文字で始まる場合
/
、先頭の文字に続く最初のコンポーネント/
は実装定義の方法で解釈される場合がありますが、3 つ以上の先頭の/
文字は単一の文字として扱われ/
ます。
この回答を bash、dash、zsh、および ksh でテストしました。
例:
///usr/bin/true; exec /usr/bin/env go run "$0" "$@"
package main
import "fmt"
func main() {
fmt.Println("你好!")
}
デフォルトではありません。ただし、gorunと呼ばれるサードパーティのツールがあります。https://wiki.ubuntu.com/gorun
残念ながら、コンパイラはシバンラインが好きではありません。gorunで実行するのと同じコードをコンパイルすることはできません。
Go プログラムはバイナリにコンパイルされます。ソースから直接実行するオプションはないと思います。
これは、C++ や Java などの他のコンパイル済み言語に似ています。一部の言語 (Haskell など) は、完全にコンパイルされたモードと、シバン行を使用してソースから直接実行できる「スクリプト」モードの両方を提供します。