2017-03-09 2 views
2

J'ai lu le Go Tour et les "paquets golang" de Google, mais je n'ai pas encore trouvé de conseils sur les meilleures pratiques dans Go pour l'organisation d'applications de taille moyenne.Organisation des programmes Go - paquets ou autre chose?

Si j'ai une application qui a conceptuellement plusieurs parties distinctes, peut-être 10^3-10^4 LOC, et je n'ai pas l'intention de créer des bibliothèques réutilisables pour une utilisation dans d'autres applications, package main ?


Pour clarifier ...

Par exemple, disons que mon programme aura les morceaux majeurs suivants:

  • Quelque chose qui gère un tas de données constamment stockées
    • permettant les opérations habituelles de création, lecture, mise à jour, suppression
  • Quelque chose qui permet à un humain de visualiser les données stockées
  • Quelque chose qui coordonne/médie entre ces
  • Quelque chose qui va chercher périodiquement des mises à jour de données à partir d'un service Web en utilisant SOAP.

Donc ce serait MVC plus un fetcher de données.

De regarder autour de ce que les gens font, je soupçonne que maintenant je

  • créer $GOPATH/src/myprogramname
  • y mettre un peu main.go avec package main et func main() { ... } en elle.
  • créer des sous-répertoires comme
    • $GOPATH/src/myprogramname/model
    • $GOPATH/src/myprogramname/view
    • $GOPATH/src/myprogramname/control
    • $GOPATH/src/myprogramname/fetch
  • ont les fichiers .Allez dans ces sous-répertoires commencer par package fetch, etc. Lorsque le nom du package toujours correspond au nom du sous-répertoire.
  • mon main.go sera probablement import (... "fetch"; "model"; "view"; "control")
  • comme main.go pousse, il divisé en d'autres fichiers .Allez de taille raisonnable nommés en fonction du but.
  • construire le programme, y compris * .go dans les sous-répertoires de paquets ci-dessus par

    cd $GOPATH/src/myprogramname 
    go build 
    

Est-ce tout ce que je dois faire? Est-ce la bonne façon d'organiser les choses? Y at-il plus que je devrais savoir ou penser? Y a-t-il une page Web canonique ou un PDF que j'ai oublié et que je devrais lire pour trouver ce genre de choses?

En bref, je ne veux pas un main.go de 10.000 lignes avec tout ce qu'il contient. Quels sont les principes idiomatiques Go pour organiser le code en fichiers, sous-répertoires, paquets et toutes autres unités organisationnelles correspondant à des divisions conceptuelles normales selon des principes bien connus de programmation structurée et/ou d'OO?

Répondre

1

Vous pouvez décomposer votre projet en plusieurs couches en fonction du niveau d'encapsulation de vos fonctions, c'est-à-dire avoir des fonctions de bas niveau dans des packages distincts et des fonctions logiques dans votre package principal. (Vous pourriez vous inspirer des architectures de type MVC) Comme nous n'avons aucun détail sur votre code, il est difficile de voir quel type d'architecture conviendrait le mieux. Mais à la fin, votre choix sera basé sur la balance code/simplicité de réutilisation.

+0

C'est un bon conseil général mais je cherchais plus de détails, je vais mettre à jour ma question pour clarifier. – RedGrittyBrick

+0

Impossible de faire plus sans détails, je vais vérifier vos mises à jour et ajouter des suggestions à ma réponse :) – Chryor

0

La meilleure pratique générale dans Go semble être que chaque paquet fournisse un type ou un service. La plupart des paquets dans la bibliothèque standard exposent un ou deux types, et des fonctions pour travailler avec ces types. Certains, comme net/http et testing, fournissent un service - pas au sens de «microservices» de quelque chose d'exécutable en soi, mais plutôt d'un ensemble de fonctionnalités liées à une activité spécifique.