Maison  >  Article  >  développement back-end  >  paramètres du répertoire golang

paramètres du répertoire golang

WBOY
WBOYoriginal
2023-05-22 16:08:07674parcourir

golang est un langage de programmation open source largement utilisé pour le développement de services réseau, d'applications à haute concurrence et de services cloud. Lors de l'écriture d'un projet en golang, une bonne structure de répertoires peut rendre le projet plus clair et plus facile à maintenir. Aujourd'hui, nous allons discuter des paramètres de la structure de répertoires golang.

  1. Division selon les fonctions

La division des projets selon les modules fonctionnels est un paramètre de structure de répertoires courant dans Golang. La méthode spécifique consiste à créer plusieurs sous-répertoires dans le répertoire racine du projet, chaque sous-répertoire correspondant à un module fonctionnel. Par exemple, l'exemple suivant :

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

Dans la structure ci-dessus, nous divisons le projet en cmd, pkg et selon les modules fonctionnels du projet. internes trois parties : 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

上面的结构中,我们根据代码类型将其分为了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

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

  • models目录中存放的是模型层代码,通常是与数据库打交道的代码。
  • views目录中存放的是视图层代码,通常是网页模板等。
  • controllers
    • Le répertoire cmd stocke les outils en ligne de commande qui peuvent être exécutés directement, comme le serveur le programme serveur code> et le programme client <code>client.

    Le répertoire pkg stocke le code de logique métier du projet, qui est divisé selon des modules fonctionnels, tels que le module user et utilmodule.

    Le répertoire internal stocke le code interne du projet, qui est uniquement utilisé dans le projet et ne sera pas utilisé par les packages externes.

    #🎜🎜##🎜🎜#Il est à noter que bien que les fonctions des répertoires pkg et internal se ressemblent, leur différence est que pkg peut être utilisé par des packages externes, tandis que le code dans le répertoire internal ne peut être utilisé que dans ce projet. #🎜🎜#
      #🎜🎜#Diviser selon le type de code #🎜🎜##🎜🎜##🎜🎜#La division du code selon le type est une autre façon courante de configurer la structure du répertoire Golang . La méthode spécifique consiste à créer plusieurs sous-répertoires dans le répertoire racine du projet, chaque sous-répertoire correspondant à un type de code. Par exemple, l'exemple suivant : #🎜🎜#rrreee#🎜🎜#Dans la structure ci-dessus, nous le divisons en cmd, pkg, vendorTrois parties : #🎜🎜#<ul>#🎜🎜#Le répertoire <code>cmd est le fichier d'entrée du programme exécutable, tel que main.go code>. #🎜🎜##🎜🎜#Le répertoire <code>pkg est divisé selon le type de code. Par exemple, les codes liés à HTTP sont placés dans le répertoire http et ceux liés à la base de données. les codes sont placés dans le répertoire database et ainsi de suite. #🎜🎜##🎜🎜#Le répertoire vendor stocke les packages tiers dont dépend le projet. #🎜🎜##🎜🎜##🎜🎜# Par rapport à la division par fonction, cette méthode de division par type de code est plus flexible, mais elle peut conduire à une structure de répertoires plus profonde et nécessiter plus de temps pour trouver l'emplacement où se trouve le code situé. #🎜🎜#
        #🎜🎜#Dividé selon le modèle MVC #🎜🎜##🎜🎜##🎜🎜#La plupart des frameworks Web adoptent le modèle MVC (Model-View-Controller). Les programmes selon ce modèle sont également un moyen très courant de configurer la structure de répertoires Golang. Par exemple, l'exemple suivant : #🎜🎜#rrreee#🎜🎜#Dans la structure ci-dessus, nous la divisons en modèles, vues, contrôleursTrois parties : #🎜🎜#<ul>#🎜🎜#<code>models Le code de la couche modèle est stocké dans le répertoire, généralement le code qui traite de la base de données. #🎜🎜##🎜🎜#Le répertoire views stocke le code des couches de vues, généralement des modèles de pages Web, etc. #🎜🎜##🎜🎜#Le répertoire controllers stocke le code de la couche contrôleur, qui est responsable de la connexion de la couche modèle et de la couche vue. #🎜🎜##🎜🎜##🎜🎜#Cette façon de diviser selon le modèle MVC peut rendre le code plus organisé et plus facile à maintenir. #🎜🎜##🎜🎜#Pour résumer, il existe de nombreuses façons de configurer le répertoire dans Golang, et différentes manières conviennent à différents projets. Nous pouvons choisir la méthode de paramétrage du répertoire correspondante en fonction de nos propres besoins. #🎜🎜#

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Article précédent:gagner installer golangArticle suivant:gagner installer golang