Go Utiliser un nom de paquet et de dossier différent


Exemple

Il est parfaitement correct d'utiliser un nom de package autre que le nom du dossier. Si nous le faisons, nous devons toujours importer le package en fonction de la structure du répertoire, mais après l'importation, nous devons nous référer au nom utilisé dans la clause du package.

Par exemple, si vous avez un dossier $GOPATH/src/mypck , et que nous y avons un fichier a.go :

package apple

const Pi = 3.14

Utiliser ce package:

package main

import (
    "mypck"
    "fmt"
)

func main() {
    fmt.Println(apple.Pi)
}

Même si cela fonctionne, vous devriez avoir une bonne raison de dévier le nom du package du nom du dossier (ou cela peut devenir une source de malentendu et de confusion).

A quoi ça sert?

Simple. Un nom de package est un identifiant Go:

identifier = letter { letter | unicode_digit } .

Ce qui permet d'utiliser des lettres Unicode dans les identifiants, par exemple αβ est un identifiant valide dans Go. Les noms de dossiers et de fichiers ne sont pas gérés par Go mais par le système d'exploitation, et différents systèmes de fichiers ont des restrictions différentes. Il existe en fait de nombreux systèmes de fichiers qui ne permettraient pas à tous les identificateurs Go valides de devenir des noms de dossiers. Vous ne pourriez donc pas nommer vos packages autrement que ce que la spécification de langage autoriserait.

Ayant la possibilité d'utiliser des noms de paquetages différents de leurs dossiers, vous avez la possibilité de nommer vraiment vos paquets en fonction des spécifications du langage, quel que soit le système d'exploitation et de fichiers sous-jacent.