Maison  >  Article  >  développement back-end  >  Pourquoi le langage Go organise-t-il le code en packages ?

Pourquoi le langage Go organise-t-il le code en packages ?

青灯夜游
青灯夜游original
2023-01-05 10:16:303809parcourir

Raison : Il n'est pas raisonnable de mettre tout le code du programme dans un seul fichier de code source. Les codes associés doivent être gérés dans des fichiers séparés. Cependant, à mesure que le nombre de fichiers du programme augmente, il doit y avoir un moyen/un formulaire pour les organiser. et gérer les fichiers, Go introduit donc la notion de "package". Le package est une forme organisationnelle logique pour la « gestion décentralisée » et « l’utilisation unifiée » des fonctions/attributs du programme.

Pourquoi le langage Go organise-t-il le code en packages ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

Présentation du package

Les fichiers de programme que nous développons en utilisant le langage go sont appelés fichiers de code source (les fichiers de code source doivent se terminer par .go). Évidemment, il n'est pas raisonnable de mettre tout le code du programme dans un seul fichier de code source. Le code associé doit être géré dans des fichiers séparés. Cependant, avec l'augmentation du nombre de fichiers de programme, il doit y avoir un moyen/un formulaire pour organiser et gérer. les fichiers, donc Go a introduit Comprendre le concept de « package ».

Package est un concept virtuel fourni par le langage Go. Plusieurs fichiers de code source avec des déclarations de package cohérentes sont logiquement organisés ensemble et appartiennent au même package.

Les packages de langage Go reposent sur la forme organisationnelle d'une arborescence de répertoires. Généralement, le nom d'un package est le nom du répertoire où se trouve son fichier source, bien que le langage Go n'exige pas que le nom du package porte le nom. même nom que le nom du répertoire où il se trouve, il est toujours recommandé que le nom du package soit le même que le nom du répertoire. Le répertoire porte le même nom pour rendre la structure plus claire.

Les packages peuvent être définis dans des répertoires très profonds. La définition du nom du package n'inclut pas le chemin du répertoire, mais le chemin complet est généralement utilisé lors du référencement du package. Par exemple, définissez un package c sous GOPATH/src/a/b/. Dans le code source du package c, il vous suffit de le déclarer comme package c au lieu de package a/b/c. Cependant, lors de l'importation du package c, vous devez apporter le chemin, tel que import "a/b/c". .

Utilisation idiomatique des packages :

  • Les noms de packages sont généralement en minuscules, utilisez un nom court et significatif.

  • Le nom du package a généralement le même nom que le répertoire dans lequel il se trouve, ou il peut être différent. Le nom du package ne peut pas contenir de symboles spéciaux tels que -.

  • Les packages utilisent généralement le nom de domaine comme nom de répertoire, ce qui garantit l'unicité du nom du package. Par exemple, les packages des projets GitHub sont généralement placés dans le répertoire GOPATH/src/github.com/userName/projectName.

  • Le package nommé main est le package d'entrée de l'application Lors de la compilation du fichier de code source qui ne contient pas le package principal, vous n'obtiendrez pas de fichier exécutable.

  • Tous les fichiers de code source d'un dossier ne peuvent appartenir qu'au même package. Les fichiers de code source qui appartiennent également au même package ne peuvent pas être placés dans plusieurs dossiers.

(1) Déclaration du package, chemin d'importation du package, problèmes auxquels il faut prêter attention

//一:包的声明
// 1、每个源码文件都必须在文件头处声明自己归属的包。
package 包名 // 包名一般总是用小写字母

// 2、包名任意,包名一致的属于同一个包

// 3、包是编译和归档Go程序的最基本单位,一个包中的多个源码文件是一个不可分割的整体

//二:包的导入路径
强调强调强调!!!!!!
包是一个把多个源码文件归一到一起管理的虚拟单位,一定要记住,它只是一个虚拟的概念而已,而实实在在地讲,多个源码文件是要放置到一个实实在在的文件夹下的,这个实实在在的文件夹所处的路径是包的导入路径。包的导入路径很重要,他是包的"家庭住址",是用来找到包的(用在import语句中,稍后介绍),但它绝不等同于包的概念

//三:注意的问题
1、一个文件夹下只能放置一个包,也就是所一个文件夹下放置的多个源码文件的包声明必须一致,go以此来确保一个路径就唯一定位到唯一的一个包。
2、包虽然与文件夹路径是截然不同的意思,但是为了方便记忆,包通常应该声明为文件夹的名字
例如文件夹路径/a/b/c/mypkg,包名应声明为package mypkg,mypkg就为包名

Pourquoi le langage Go organise-t-il le code en packages ?

(2) Distinction et placement du package

Les packages sont un concept de niveau virtuel et logique, mais le plusieurs fichiers de code source organisés par le package sont en effet réels et doivent être placés dans un certain dossier.

Veuillez noter : par souci de simplicité dans l'écriture ultérieure, l'auteur stocke directement les multiples fichiers de code source organisés par le package L'emplacement est simplement appelé l'emplacement où le colis est stocké, les lecteurs doivent donc en être conscients.

Le package principal contient le point d'entrée du programme et est principalement utilisé pour l'exécuter. Dans tous les cas, le package principal peut être placé dans n'importe quel dossier.

L'auteur appelle les packages autres que le package principal d'autres packages, faisant spécifiquement référence aux packages intégrés, aux packages personnalisés et aux packages tiers téléchargés. Différent du package principal, les autres packages sont principalement utilisés pour être importés et utilisés. Les emplacements de placement sont les suivants

// 内置包
内置包固定被放置在`$GOROOT/src/`下,与任何模式无关

// 自定义包
在未启用modules模式的情况下,自定义包需要放置在GOPATH指定的任意目录下的src中

// 下载的第三方包
在未启用modules模式的情况下,使用go工具链命令下载的第三方包总是默认被存放到GOPATH的第一个目录的src下 


// 强调一下
在早期的Go环境中,自定义的包与下载的第三方包都是放到了$GOPATH/src下,因为早期Go采用的是和GOPATH模式,而且即便是在GO1.14.2版本中,在我们还未学习如何使用任何新模式前,默认使用的仍是GOPATH模式

ps :

1 Le package intégré est le surnom de l'auteur pour le package standard

2. tant qu'il est stocké dans l'espace de travail GOPATH Les packages sont officiellement appelés packages d'espace de travail

(3) Utilisation des packages

// 1、一个源码文件中声明的函数、类型、变量和常量等标识符/名字对同一包中的所有其他源码文件都可见,不需要加任何前缀即可引用,因为代码包只是一种组织管理源码文件的形式,同一个包下的多个源码文件本就属于一个整体,事实上我们完全可以将一个包当成一个”大文件“去看,毫无疑问这个”大文件“中声明的标识符/名字不能重名

// 2、包名很关键
名为main的包可简称为”main包“,是程序的入口,go程序运行时会查找main包下的main函数,main函数既没有参数声明也没有结果声明,见下图

名不为main的包可称之为”其他包“,是程序的功能/属性集合,此类包用来被其他包导入使用,为何此时包名仍然很关键呢?因为我们导入时用的是导入路径(指的是包所在的路径,该路径不是绝对路径,稍后介绍),但是使用的则可能会使用"包名.xxx"

Pourquoi le langage Go organise-t-il le code en packages ?

Pour résumer : les packages sont un sens logique de « gestion décentralisée » et « d'utilisation unifiée » de fonctions/attributs du programme La forme organisationnelle sur

【Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation

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