2017-12-28 13 views
-3

私はgoバイナリをビルドして、このように実行するように言われています。Goバイナリを実行するには?

go build hello-world.go 
$ ls 
hello-world hello-world.go 

./hello-world 
hello world 

のでgo build hello-world.goは、人間が読めるhello-world.goファイルを受け取り、バイナリファイルを作成します。

私の二つの質問は次のとおりです。通常

  1. 、コンパイルされたコードを直接実行可能なファイルの利点は何ですか? OSXやその他の依存関係に依存していないのでしょうか?どうして?

  2. なぜ./hello-worldが作成されたバイナリを実行しますか?

+0

あなたの最初の質問ではないが、おそらく長い数千年のために議論され続ける場合は、./接頭辞を必要としています。 SOのために十分短い形式でそれに答える方法はありません。 2番目の質問は、ここで話題にはなりません。「コンピュータ101の使い方」です。たぶん、スーパーユーザーがより良い場所になるだろう。 – Flimzy

答えて

0
  1. あり(例えばRubyなど)インタプリタ型言語対(例えばGolangなど)のコンパイル言語について多くの議論がありますが、コンパイル・フェーズがコードを最適化しているため、一般的に、コンパイル言語は高速で、ターゲットマシンは、ネイティブに実行することができますので、インタプリタ(余分なレイヤー)を使用する必要はありません。
  2. すべてのバイナリは、同じOSとアーキテクチャ間で移植可能です。つまり、64ビットLinuxアーキテクチャでGolangアプリケーションをコンパイルすると、32ビットLinuxアーキテクチャでGolangアプリケーションを実行することはできなくなります。
  3. これは、LinuxおよびUnixベースのシステムでバイナリを実行するための標準的な方法です。バイナリは、何十年も議論されてきたあなたの$PATH
+0

"基本的に、コンパイルされた言語は高速です" ---それは誤解を招きやすく、100%正確ではありません。再帰的アルゴリズムを実装し、コンパイルされたノードより "解釈された"ノードがどのように優れているかを見てください。 JITに準拠した言語では、コンパイルされた/解釈された言語ではパフォーマンスの点があまり明確ではありません。私はそのアイテムを完全に削除します。 – zerkms

+0

私は、言い換えると、 "基本的に"よりも一般的に速いと言い換えるために言い換えると、 –

+0

"解釈された"言語も実行時に最適化されます。コンパイルされていても、いくつかの言語では、ターゲットプラットフォームで実行時にいくつかの最適化を行うことができます:jvm、.netアイテム#1全体が誤解を招く恐れがあります。 – zerkms

0

./hello-worldは、作成されたバイナリを実行する理由は、シェルスクリプトの概念に基づいています。 bashのすべてのbashファイルを#!/bin/bashとすれば、シェルエンジンによって実行可能なシェルスクリプトを示すことができます。このファイルをパーミッションで実行可能にすると、。 /file.sh、インタプリタがトリガされるためです。この場合、同じ方法で動作するように設定されています。 Brian KernighanはUNIXの作成を手伝ってくれましたし、Golangチームにも所属していたので、ファイル実行のコンセプトは建築的に焼き付けられました。

コンパイルされたコードの利点は、実行時の静的解析を可能にします.Goは強力な型言葉です。これは、コンパイルされたコードが多数の最適化を可能にするためです。

関連する問題