実際の開発作業では、直接シーンをコンパイルしてリンクするコンパイラを呼び出して、それは、プロジェクト内のソースファイルとの相互依存関係を一つだけのソースコードファイル間のような単純な持っていないので、少なくています。そのようなファイルが徐々にコンパイルファイル、および災害未満という何の場合。業界のベテランとして、言語設計を行く、自然にこれを無視しません。リリース時に一時的な解決策は、ゴーゴー1ので、強力なコマンドラインツールを導入して、早期の言語メイクファイルを移動します。
完全エンジニアリング構造を導出し、秩序を構築するためのディレクトリ構造とパッケージ名との完全なプロジェクトファイルの概念を排除するコマンドラインツールで革命的な移動します。実行に行くと唯一のソースファイルのケースを構築して行く取得直接使用することができるので、プロジェクト管理の議論は、より冗長に見えます。ここでは、基本設計のGo言語管理を表示するために、仮想現実に近いプロジェクトを使用します。
6.1ワークスペース
6.1.1ワークエリア
コードは、ワークスペースに配置する必要があります移動します。srcディレクトリ、pkgディレクトリとbinディレクトリ:ワークスペースには、それは3つのサブディレクトリが含まれている必要があり、実際には特定のプロジェクトに対応するディレクトリです。
リットルのsrcディレクトリ:組織のために移動して、ソース・コード・パッケージとして、ファイルを保存します。(例:.GO .C .H .S、等)
リットルのpkgディレクトリ:インストール後に店舗建物コードパッケージに使用さは、(ライブラリのソースファイルを移動します含まれている)「.A」アーカイブ経由のコマンドをインストールして行きます。
L binディレクトリ:pkgディレクトリと類似し、コマンドをインストールゴーゴーコマンドのソースファイルによって生成された実行可能ファイルを保存することにより、インストールの完了後。
ソースコード、コマンドラインツールのすべてを含むために使用さsrcディレクトリには必須のルールを移動し、PKGビンと必要なゴーコマンドラインツールが自動的にビルド処理中にこれらのディレクトリを作成する場合は、手動で作成する必要はありません。
特に注目すべきなのは、現在のワークスペースへのコマンドソースbinディレクトリにインストールされます、環境変数GOPATHディレクトリのパスが唯一のワークスペースが含まれているときにのみ、コマンドをインストールして行くことです。環境変数は、このようなディレクトリパスGOPATH複数のワークスペースは、コマンドの実行が失敗しますインストール行く含まれている場合は、環境変数のGOBINを設定する必要があります。
6.1.2 GOPATH設定
このプロジェクトをビルドするために、我々は最初のプロジェクト環境変数GOPATHのルートディレクトリに追加する必要する必要があります。それ以外の場合は、同じであっても作業ディレクトリ(ワークスペース)で、コード間の絶対的なコードのパッケージパスでコールを完了することはできません。
実際の開発環境では、彼らはより多くの作業ディレクトリを持っている傾向があります。ディレクトリパスのこれらの作業ディレクトリは、GOPATHに追加する必要があります。複数のディレクトリがある場合、複数のGOPATHがある場合、デフォルトでは最初のディレクトリ上のコンテンツを取りに行くだろう、複数のディレクトリは、Windows、Linuxシステムのために、セミコロンで区切り文字は、コロンであることに注意してください。
6.2パッケージ
すべてのGo言語プログラムは、ファイルのいくつかのグループに編成され、各ファイルは、パケットと呼ばれています。そのようなコードは、別の項目を参照し、各パケット多重部として小使用することができます。
ファイル名の接尾辞.GO一個の以上のソース・ファイルに格納されたソースパケットは、サフィックスは通常、パケットがパッケージパスに導入されているディレクトリのパスです。
6.2.1カスタムパッケージ
大規模なアプリケーションのために、我々は、異なるパッケージを達成するために、それぞれ、その機能論理ユニットに分離されなければなりません。我々は最高の配置GOPATHのsrcディレクトリ(またはサブディレクトリのsrc GOPATH)を作成したカスタムパッケージ。
囲碁の言語では、ファイル名に含まれたソースコードは任意とすることができます。ただし、ソースファイルのこれらの任意の名前は、ファイルの最初の行としてパッケージ宣言文、単一の名前空間に対応する各パケットをベースとする必要があります。
package calc
复制代码
特に⼩意思決定への書き込みアクセスをので、ズーム手紙に名前を付けるために、パッケージのメンバー:
L公開:したがって、特にズームライト文字は、パッケージの外部からアクセスすることができます
リットルプライベート:⼩ので、特に手紙書き、メンバーのみがバッグにアクセスすることができます
**注:**同じディレクトリが別のパッケージを定義することはできません。
6.2.2 main包
メインパッケージの名前が付いたのGo言語では、特別な意味を持っています。このパッケージは、バイナリ実行ファイルの名前ですコンパイルしようとする言語コンパイラを移動します。ゴー言語コンパイラの実行可能ファイルとすべてがメインのパッケージ名を持っている必要があります。実行可能プログラムと唯一のメインパッケージ。
コンパイラは、パッケージの名前がメインで見つけたとき、それはまた、(メインと呼ばれる関数)を見つけなければならない、と彼らは実行可能ファイルを作成しません。main()関数は、この機能がないので、プログラムの実行を開始する方法はありません、エントリー手続きです。コンパイルされたディレクトリプログラムのディレクトリ名は、バイナリ実行ファイル名としてメインパッケージコードステートメントを使用します。
6.2.3主な機能と関数init
init関数(パッケージのすべてに適用することができる)と主な機能(本体のみパッケージ化するために適用されます):そこに行くには2つの予約機能します。これらの2つの関数は、任意のパラメータと戻り値で定義することはできません。しばらくのinit関数の任意の数を書き、それが後の可読性や保守性のためであるかどうか、私たちは強く、各ファイルのパッケージ内のすべてのユーザーがちょうどinit関数を記述することをお勧めすることができますパッケージ。
行くプログラムは自動的には、init()とメイン()を呼び出しますので、あなたはどこにでもこの2つの関数を呼び出す必要はありません。init関数内の各パッケージはオプションですが、メインパッケージには、主な機能が含まれている必要があります。
各パッケージには、プログラムが実行を開始するときに呼び出される初期化関数の任意の数を含めることができます。すべてのinit関数は、main関数の前に実行するようにコンパイラに発見されるように配置されます。init関数は、優先的に指導を実行する前に行う初期化するパッケージ、または他の変数で使用するために提供されています。
初期化とプログラムの実行は、メインパッケージから始めます。メインパッケージは、他のパッケージをインポートする場合は、コンパイル時にそれらをインポートすることになります。
時には、パッケージは同時に複数のパケットに導入され、それが唯一の(例えば、多くのパッケージは、パッケージが使用されますfmtをかもしれませんが、いくつかの回をインポートする必要がないので、それは一度だけインポートされます)一度インポートされます。
パケットは、パケットは、追加のパッケージを導入した場合に導入されると、その後、他のパッケージは、パケット・レベルの定数及び変数がこれらのパケットを初期化され、中に最初に導入され、次いで場合(init関数を実行します)、というように。そして、導入されるすべてのパッケージがロードされ、それはパケットレベルの定数に開始され、変数はメインパックに初期化され、その後、init関数(もしあれば)にメインパックを行い、最終的に主要な機能を実行します。次の図は、全体のプロセスが実行され、詳細に示しています。
コードのディレクトリ構造のサンプル:
main.go次のサンプルコードを:
// main.go
package main
import (
"fmt"
"test"
)
func main() {
fmt.Println("main.go main() is called") test.Test() } 复制代码
test.goサンプルコードを次に示します。
//test.go
package test
import "fmt"
func init() {
fmt.Println("test.go init() is called") } func Test() { fmt.Println("test.go Test() is called") } 复制代码
結果:
6.2.4インポートパッケージ
インポートは、キーワードのインポートを使用する必要があり、それはあなたがその場所で、パッケージ内のコードを参照したいコンパイラを教えてくれます。パッケージパスは、相対パス、または絶対パスであることができます。
//方法1
import "calc"
import "fmt"
//方法2
import (
"calc"
"fmt"
)
复制代码
標準ライブラリのパッケージには、移動の設置の場所を見つけます。開発者が作成したパッケージはディレクトリを指定GOPATH環境変数を見に行きます。これらのディレクトリに指定されたGOPATHは、個人的なワークスペースの開発者です。
コンパイラはGOPATHを検索することができますが、インポートするパッケージを見つけることができなかった場合は、その後、プログラムの実行を構築したり実行しようとすることは間違って行くだろう。
、パッケージをインポートした後、場合機能、またはそのコールの種類コンパイルエラーを報告しません。注意してください。
6.2.4.1ポイント操作
import (
//这个点操作的含义是这个包导入之后在你调用这个包的函数时,可以省略前缀的包名
. "fmt"
)
func main() {
Println("hello go")
}
复制代码
6.2.4.2エイリアスの操作
STARTガイドはパケットとして、パッケージ部材のアクセスシャッターモードを指定することができた場合⽐同じ名前の衝突を避けるために名前を変更します:
import (
io "fmt" //fmt改为为io
)
func main() {
io.Println("hello go") //通过io别名调用
}
复制代码
6.2.4.3 _操作
時には、ユーザーがパッケージをインポートする必要があるかもしれませんが、パッケージが参照識別子を必要としません。この場合、ブランクは、導入された識別子_名前を変更するために使用することができます。
import (
_ "fmt"
)
复制代码
_実際には、操作はむしろパッケージ内部の直接関数を使用するよりも、パッケージの導入ですが、パッケージには、init関数内で呼び出します。
6.3テストケース
6.3.1テストコード
次のようにcalc.goコードは次のとおりです。
package calc
func Add(a, b int) int { //加
return a + b
}
func Minus(a, b int) int { //减
return a - b
}
func Multiply(a, b int) int { //乘
return a * b
}
func Divide(a, b int) int { //除
return a / b
}
复制代码
次のようにmain.goコードは次のとおりです。
package main
import (
"calc"
"fmt"
)
func main() {
a := calc.Add(1, 2)
fmt.Println("a = ", a) } 复制代码
6.3.2 GOPATH設定
6.3.2.1窓
6.3.2.2 Linuxの
6.3.3プログラムをコンパイルして実行
インストールGO 6.3.4を使用します
環境変数GOBINを設定します。
ソースディレクトリには、インストールに行くノック: