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.
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
In der obigen Struktur unterteilen wir das Projekt in drei Typen: cmd
, pkg
und internal
entsprechend den Funktionsmodulen des Projekts: cmd
、pkg
、internal
三个部分:
cmd
目录下存放的是可以直接运行的命令行工具,比如服务器程序 server
和客户端程序client
。pkg
目录下存放的是项目的业务逻辑代码,按照功能模块进行划分,比如user
模块和util
模块。internal
目录下存放的是项目的内部代码,只在项目中使用,外部包不会使用它。值得注意的是,虽然pkg
和internal
目录的作用看起来很相似,但是它们的区别在于,pkg
目录下的代码可以被外部包使用,而internal
目录下的代码只能在本项目中使用。
将代码按照类型进行划分,是另一种常见的golang目录结构设置方式。具体做法是在项目根目录下创建多个子目录,每个子目录对应一种代码类型。比如下面这个例子:
myproject/ ├── cmd/ │ ├── main.go ├── pkg/ │ ├── http/ │ │ ├── server.go │ │ ├── router.go │ ├── database/ │ │ ├── db.go │ ├── log/ │ │ ├── log.go ├── vendor/ ├── go.mod ├── go.sum
上面的结构中,我们根据代码类型将其分为了cmd
、pkg
、vendor
三个部分:
cmd
目录下的是可执行程序的入口文件,比如main.go
。pkg
目录下按照代码类型进行划分,比如将HTTP相关的代码放在http
目录下,将数据库相关的代码放在database
目录下等等。vendor
目录下存放的是项目所依赖的第三方包。相对于按照功能划分的方式,这种按照代码类型划分的方式更加灵活,但是可能会导致目录结构比较深,需要更多的时间去查找代码所在的位置。
大多数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
上面的结构中,我们根据MVC模式将其分为了models
、views
、controllers
三个部分:
models
目录中存放的是模型层代码,通常是与数据库打交道的代码。views
目录中存放的是视图层代码,通常是网页模板等。controllers
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.
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. 🎜cmd
, pkg
und vendor
:🎜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. 🎜models
, views
und controllers
:🎜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!