Go-プロジェクト構造とコード組織

3091 ワード

概要
      ,    、  ,       ,           。

オープンソースの優れたプロジェクトの構造例
      Go        module       ,  ,      vendor     ,       module      ,                   ,  :https://studygolang.com/topics/8737

Docker
https://github.com/moby/moby
├── api      //         API   
├── builder  //        
├── cli      //          
├── cmd      //        ,main        
├── contrib  //             ,          
├── docs    //     
├── internal //          (  )
├── pkg     //                (  )
├── plugin  //       

Kubernetes
https://github.com/kubernetes/kubernetes
├── api
├── build  //        
├── cmd
├── docs
├── pkg
├── plugin
├── test    //            、    
├── third_party //            

Gogs
https://github.com/gogs/gogs
├── cmd
├── conf    //        
├── docker  //    docker   
├── models  // MVC    model
├── pkg
├── public  //       ,          CDN
├── routes  //   
├── scripts //     
├── templates //       
``

### influxdb
https://github.com/influxdata/influxdb

├——cmd├——docker├——docs├——http//HTTP Handler等を格納し、MVCのController├——internal├——models├——pkg├——scripts``に相当する
オープンソースプロジェクトのまとめ
全体的に、これらの優れたオープンソースプロジェクトは、統一されたディレクトリ構造方式がありませんが、一般的には、いくつかの共通点があります.これは**https://github.com/golang-standards/project-layout **このプロジェクト.
標準Goプロジェクトレイアウト(構造)
https://github.com/golang-standards/project-layout プロジェクトはGoプロジェクトのレイアウトをまとめ、これらの主要なディレクトリを見てみましょう.
/cmd
このディレクトリは、Goプロジェクトのエントリ、すなわちmain.mainを格納するために使用されます.一般的には、実行可能なプログラムの名前を表すcmdディレクトリの下にサブディレクトリを作成する必要があります.上記の優秀なオープンソースプロジェクトは、基本的にこのルールに従っています.実際、Go言語自体もgithub.com/golang/toolsもcmdとそのサブディレクトリの形式を採用しているので、私たちのプロジェクトは使用しない理由はありません.一般的に、このディレクトリのコードはできるだけ少ないはずです.
/internal
これはGoパッケージの特性で、パッケージに置かれているコードで、プロジェクト内でのみ使用したいことを示しています.プロジェクトまたはライブラリはプライベートで、他のプロジェクトまたはライブラリは使用できません.
/pkg
このパッケージはinternalに対応でき、公開されています.一般的に、パッケージに格納されているコードは、特定のビジネスに関係なく、本プロジェクトや他のプロジェクトの再利用を容易にする必要があります.コードをパッケージに入れることを決めたときは、他の人がそれを使用する可能性が高いので、責任を負うべきです.GOPATHにはpkgというディレクトリがあるので、コミュニティではあまり受け入れられない人もいます.いずれにしても、オープンソースには優れたプロジェクトがたくさんあります.ここには、そのプロジェクトのリストがあります.https://github.com/golang-standards/project-layout/blob/master/pkg/README.md
/api
このディレクトリは、OpenAPI/Swaggerルールの説明、JSONフォーマットの定義、プロトコル定義ファイルなどを格納するために使用されます.Dockerなどの具体的な対外公開APIを格納するために使用される場合もあります.https://github.com/moby/moby/tree/master/api/server .
/init
システムの自動起動に伴うスクリプトを保存します.systemd、upstart、sysvなどです.またはsupervisorによるプロセス管理のスクリプト.
/scripts
build、install、analysisなどの操作スクリプトを保存します.これらのスクリプトにより、プロジェクトルートディレクトリのMakefileが簡潔になります.
/build
このディレクトリは、パッケージ化および継続的な統合に関するスクリプトを格納するために使用されます.
/test
一般に、統合テスト、テストデータなど、ユニットテスト、ベンチマークテスト以外のテストを格納するために使用される.
Go言語ソースウェアハウスにはtestディレクトリがあります.
/docs
設計とユーザードキュメントの保存
/tools
プロジェクトを保存するサポートツール.
/third_party
第3のコードパッケージから抽出されました.公式の提案によると、パッケージ名はあるべきではありません.だから本人は使用をお勧めしません.本当にこのような需要があって、thirdpartyと命名することを考えます.
転載先:https://www.cnblogs.com/Paul-watermelon/p/11230197.html