Heim > Backend-Entwicklung > Golang > Golang-Verzeichniseinstellungen

Golang-Verzeichniseinstellungen

WBOY
Freigeben: 2023-05-22 16:08:07
Original
707 Leute haben es durchsucht

golang ist eine Open-Source-Programmiersprache, die häufig für die Entwicklung von Netzwerkdiensten, Anwendungen mit hoher Parallelität und Cloud-Dienste verwendet wird. Wenn Sie ein Projekt in Golang schreiben, kann eine gute Verzeichnisstruktur das Projekt klarer und einfacher zu warten machen. Heute werden wir die Einstellungen der Golang-Verzeichnisstruktur besprechen.

  1. Aufteilung nach Funktionen

Die Aufteilung von Projekten nach Funktionsmodulen ist eine gängige Verzeichnisstruktureinstellung in Golang. Die spezifische Methode besteht darin, mehrere Unterverzeichnisse im Projektstammverzeichnis zu erstellen, wobei jedes Unterverzeichnis einem Funktionsmodul entspricht. Zum Beispiel das folgende Beispiel:

myproject/
├── cmd/
│   ├── server/
│   │   ├── main.go
│   ├── client/
│   │   ├── main.go
├── pkg/
│   ├── user/
│   │   ├── user.go
│   ├── util/
│   │   ├── util.go
├── internal/
│   ├── auth/
│   │   ├── auth.go
│   ├── db/
│   │   ├── db.go
├── vendor/
├── go.mod
├── go.sum
Nach dem Login kopieren

In der obigen Struktur unterteilen wir das Projekt in drei Typen: cmd, pkg und internal entsprechend den Funktionsmodulen des Projekts: cmdpkginternal三个部分:

  • cmd目录下存放的是可以直接运行的命令行工具,比如服务器程序 server和客户端程序client
  • pkg目录下存放的是项目的业务逻辑代码,按照功能模块进行划分,比如user模块和util模块。
  • internal目录下存放的是项目的内部代码,只在项目中使用,外部包不会使用它。

值得注意的是,虽然pkginternal目录的作用看起来很相似,但是它们的区别在于,pkg目录下的代码可以被外部包使用,而internal目录下的代码只能在本项目中使用。

  1. 根据代码类型划分

将代码按照类型进行划分,是另一种常见的golang目录结构设置方式。具体做法是在项目根目录下创建多个子目录,每个子目录对应一种代码类型。比如下面这个例子:

myproject/
├── cmd/
│   ├── main.go
├── pkg/
│   ├── http/
│   │   ├── server.go
│   │   ├── router.go
│   ├── database/
│   │   ├── db.go
│   ├── log/
│   │   ├── log.go
├── vendor/
├── go.mod
├── go.sum
Nach dem Login kopieren

上面的结构中,我们根据代码类型将其分为了cmdpkgvendor三个部分:

  • cmd目录下的是可执行程序的入口文件,比如main.go
  • pkg目录下按照代码类型进行划分,比如将HTTP相关的代码放在http目录下,将数据库相关的代码放在database目录下等等。
  • vendor目录下存放的是项目所依赖的第三方包。

相对于按照功能划分的方式,这种按照代码类型划分的方式更加灵活,但是可能会导致目录结构比较深,需要更多的时间去查找代码所在的位置。

  1. 根据MVC模式进行划分

大多数Web框架都采用了MVC(Model-View-Controller)模式,将程序按照这种模式进行划分也是很常见的一种golang目录结构设置方式。比如下面这个例子:

myproject/
├── cmd/
│   ├── main.go
├── pkg/
│   ├── models/
│   │   ├── user.go
│   ├── views/
│   │   ├── index.gohtml
│   ├── controllers/
│   │   ├── user.go
├── vendor/
├── go.mod
├── go.sum
Nach dem Login kopieren

上面的结构中,我们根据MVC模式将其分为了modelsviewscontrollers三个部分:

  • models目录中存放的是模型层代码,通常是与数据库打交道的代码。
  • views目录中存放的是视图层代码,通常是网页模板等。
  • controllers
    • Das Verzeichnis cmd speichert Befehlszeilentools, die direkt ausgeführt werden können, wie z. B. das Serverprogramm server und das Client-Programm client code>.

    Das Verzeichnis pkg speichert den Geschäftslogikcode des Projekts, der nach Funktionsmodulen unterteilt ist, wie dem Modul user und dem Modul util Modul.

    Das Verzeichnis internal speichert den internen Code des Projekts, der nur im Projekt verwendet wird und nicht von externen Paketen verwendet wird.

    🎜🎜Es ist erwähnenswert, dass die Funktionen der Verzeichnisse pkg und internal zwar sehr ähnlich aussehen, ihr Unterschied jedoch darin besteht, dass sie sich im Verzeichnis pkg befinden Der Code in kann von externen Paketen verwendet werden, während der Code im Verzeichnis internal nur in diesem Projekt verwendet werden kann. 🎜
      🎜Aufteilen nach Codetyp🎜🎜🎜Das Aufteilen von Code nach Typ ist eine weitere gängige Methode zum Einrichten der Golang-Verzeichnisstruktur. Die spezifische Methode besteht darin, mehrere Unterverzeichnisse im Projektstammverzeichnis zu erstellen, wobei jedes Unterverzeichnis einem Codetyp entspricht. Zum Beispiel das folgende Beispiel: 🎜rrreee🎜In der obigen Struktur teilen wir sie entsprechend dem Codetyp in drei Teile auf: cmd, pkg und vendor :🎜
      🎜Das Verzeichnis cmd enthält die Eintragsdatei für das ausführbare Programm, z. B. main.go. 🎜🎜Das Verzeichnis pkg ist nach Codetyp unterteilt. Beispielsweise werden HTTP-bezogene Codes im Verzeichnis http und datenbankbezogene Codes im Verzeichnis database code>-Verzeichnis und so weiter. 🎜🎜Im Verzeichnis <code>vendor werden die Pakete von Drittanbietern gespeichert, von denen das Projekt abhängt. 🎜🎜🎜Verglichen mit der Methode der Division nach Funktion ist diese Methode der Division nach Codetyp flexibler, führt jedoch möglicherweise zu einer tieferen Verzeichnisstruktur und erfordert mehr Zeit, um den Speicherort des Codes zu finden. 🎜
        🎜Aufteilung nach dem MVC-Muster🎜🎜🎜Die meisten Web-Frameworks verwenden das MVC-Muster (Model-View-Controller), und es ist auch sehr üblich, Programme in Golang How nach diesem Muster zu unterteilen um die Verzeichnisstruktur einzurichten. Zum Beispiel das folgende Beispiel: 🎜rrreee🎜In der obigen Struktur teilen wir sie gemäß dem MVC-Muster in drei Teile auf: models, views und controllers :🎜
        🎜Das Verzeichnis models speichert Modellebenencode, normalerweise Code, der sich mit der Datenbank befasst. 🎜🎜Das Verzeichnis views speichert Ansichtsebenencode, normalerweise Webseitenvorlagen usw. 🎜🎜Das Verzeichnis controllers speichert den Code der Controller-Ebene, der für die Verbindung der Modellebene und der Ansichtsebene verantwortlich ist. 🎜🎜🎜Diese Art der Aufteilung nach dem MVC-Muster kann den Code besser organisieren und einfacher warten lassen. 🎜🎜Zusammenfassend lässt sich sagen, dass es viele Möglichkeiten gibt, das Verzeichnis in Golang einzurichten, und unterschiedliche Methoden eignen sich für verschiedene Projekte. Wir können die entsprechende Verzeichniseinstellungsmethode entsprechend unseren eigenen Anforderungen auswählen. 🎜

    Das obige ist der detaillierte Inhalt vonGolang-Verzeichniseinstellungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage