Efficace Go, et un certain nombre d'autres wikis et sites, exhortez le programmeur Go pour utiliser des noms simples pour les colis et éviter quelque chose de trop général que «Divers» ou «Utils».
En outre, allez les espaces de noms multi-consommations -Il a un niveau - le nom du paquet. P>
Ainsi, les noms de paquets sont simples, un ou deux mots combinés au plus, et spécifiques au sujet. P>
et il n'y a pas de moyen d'injecter un nouveau code dans un package existant, alors ce qui est dans «OS», par exemple, est essentiellement scellé par l'auteur de la version de l'emballage «OS» que je choisis d'utiliser (très probablement le Go Mais c'est là que je suis d'où je suis laissé gratter ma tête. P> Comment puis-je écrire une bonne bibliothèque de mienne qui étend des concepts / packages existants tels que comme un exemple arbitraire, disons que je suis couramment Besoin d'une fonction telle que Ceci est utile. Il pourrait être écrit de longue main en tant que jeu de déclarations si, mais est auto-documentant et un peu plus court pour écrire une fois et permet à un code client de consommer et d'être un peu plus court et plus concis dans leur signification (moins d'analyse visuelle de 'getenvordefault 'vs. Le code épelé sur et encore et encore - dans ce cas: p> Ceci est juste un exemple. Il est court afin de s'adapter ici et d'être facile à discuter. Je vais sortir sur un membre et supposer que vous pouvez penser à un exemple arbitraire et plus complexe où il n'est pas question que vous voudriez que vous voudriez le mettre dans une bibliothèque afin d'écrire et de le déboguer une fois, alors avoir Plusieurs projets utilisent et consomment de telles fonctionnalités. P> Que nommer ce package? p> pas "utils" ni "MIST" comme c'est trop GOSS.
Ne peut pas être 'os' comme c'est effectivement scellé.
Ne peut pas être «organisation / système d'exploitation» car nous ne pouvons pas faire des espaces de noms multi-niveaux.
Ne devrait pas être "organisation_os" comme ce n'est pas idiomatique pour aller. P> alors où cela nous laissait-il? P> 'osx' - erm ...
'OSX' - amusant mais ...
'osmisc' - semble laid / mauvais ...
'env' - d'accord, bien sûr, mais c'est super générique - combien dois-je parier qu'il existe déjà des paquets plus méritants de ce nom qui seraient en conflit à l'avenir ... P> Vous sentez-vous Moi? P> Ceci est un exemple. Mais j'ai des extensions utiles à JSON, à UUID, aux cartes de 32 bits, aux serveurs HTTP, aux clients HTTP, ... p> Que fait un programmateur? P> Copiez un tel petit misc. Fonctions utilitaires et types autour de chaque projet? P> Proposez-vous avec des noms très non idiomatiques pour les colis? p> Quelles suggestions pourriez-vous avoir à offrir? p> p> OS Code > Emballage). P>
OS code> ou
FMT code> ou quelque chose d'aussi générique comme "étend les types de cartes" dans un package ou un ensemble de packages à partager entre mes propres projets (ou mon organisation, ou peut-être publiquement à temps)? p>
getenvordefault (clé, définition de chaîne) string code> p>
3 Réponses :
La bibliothèque standard utilise un suffixe "util". Exemples: P>
Cool - Je n'étais pas au courant de cela. Je suis toujours confondue par l'histoire à long terme ici - comment ils pensent que des centaines d'équipes DEV souhaitant faire des utilitaires pour étendre HTTP - par exemple - sont destinés à le faire avec un espace de noms parent pour les distinguer tous?
Les espaces de noms n'ont pas besoin de ne jamais entrer en conflit, car vous pouvez utiliser un alias à l'importation, pour importer plusieurs packages avec le même nom par défaut.
Il y a plusieurs façons de faire face à cela.
Premier, même si c'est discouré, Si vous écrivez des extensions sur un package existant Vous pouvez utiliser une nommage à plusieurs niveaux en s'appuyant sur vos utilisateurs à alias est correctement: p> si vous écrivez un remplacement pour un package existant < Code> Quelque chose code>, vous pouvez nommer votre package misc code>,
aidateurs code>,
API code> Il existe dans de nombreux projets. p>
quelque chose code>, vous pouvez nommer le nouveau package
quelque chose code>. p>
quelque chose code>, similaire à
github.com/sirupsen/logrus code>, qui est un remplaçant pour stdlib
log < / code> package. p> p>
Dans des cas très simples, cela ne me dérange pas d'avoir Mais examinons un cas plus complexe. Vous mentionnez à l'aide du nom de la société dans le package comme Le nom du paquet peut également être auto-documentant. utils code> dans mes projets. Si les appels de fonction sont explicites, comme par exemple,
utils.getenvordefault code>, je constate qu'il est toujours facile de lire et de comprendre. P>
organisation_os code>. Qui rend effectivement le code plus difficile à lire. P>
Enviroment.getenvorfault code> pourrait être une option. Si le nom devient trop gros, vous pouvez toujours alias l'importation à quelque chose de plus concis. P>
Ouais, pour un projet donné, la fonction d'alias est cool et utile. Je suis toujours confondue par l'histoire à long terme ici - comment ils pensent que des centaines d'équipes DEV souhaitant faire des utilitaires pour étendre HTTP - par exemple - sont destinés à le faire avec un espace de noms parent pour les distinguer tous? Je peux utiliser «environnement» comme vous le suggérez - mais alors mon forfait «environnement» entrera en conflit avec tous les autres qui veulent ce nom ...
Eh bien, s'il y a deux packages code> environnement code>, s'ils ont des chemins d'importation différents, des alias peuvent y aider. Mais si c'est dans la même entreprise, pourquoi ne pas unir toutes les fonctions dans le même paquet? C'est toujours possible d'avoir plusieurs paquets faire la même chose. Mais ce n'est pas comme si ils ne peuvent pas être renommés d'être légèrement différents.
Pour mes propres projets - je suis tout à fait d'accord pour dire que utils.max32 (A, B) est trivialement facile à lire et à comprendre - ou utils.getenvordefault (), ouc. Je reçois la repasse de la publication publiquement sous utils - mais pour un petit Au groupe de taille moyenne, je ne vois pas les conseils pour éviter de tels noms comme convaincants. Je ne vois toujours pas une bonne "histoire" pour aller dans son ensemble avec seulement des noms de paquet de 1 niveau - nom-collision va être rampant ...
Ne négligez pas jusqu'à ce que vous sachiez l'API que vous raisonnez. Il n'y a pas une réponse universelle à votre question, cela dépend de l'API et des décisions prises par ses écrivains. Bien que votre exemple, si cela ne rentre pas dans la principale du programme CLI, il appartient à un package situé dans
org / autre / os code> qui contient un
importe "OS". code ". > et les ajouts.
@ MH-CBON et quel nom de paquet utiliseriez-vous pour cette extension - dans votre projet? J'ai un sac de petits ajouts pour une douzaine de sdlib différents ou de forfaits communs ...