137 votes

Quel est le meilleur moyen de regrouper des ressources statiques dans un programme Go?

Je suis en train de travailler sur une petite application web en Aller qui est destiné à être utilisé comme un outil sur la machine d'un développeur pour aider à déboguer leurs applications/services web. L'interface du programme est une page web qui comprend non seulement l'HTML, mais un peu de JavaScript (pour les fonctions), les images et les CSS (pour le style). Je suis la planification d'open-sourcing cette application, les utilisateurs doivent simplement être en mesure d'exécuter un fichier Makefile et toutes les ressources iront là où ils doivent aller. Cependant, j'aimerais aussi être en mesure de simplement distribuer un exécutable avec aussi peu de fichiers/dépendances que possible. Est-il un bon moyen de regrouper le code HTML/CSS/JS avec l'exécutable, de sorte que les utilisateurs n'ont qu'à télécharger et à s'inquiéter d'un fichier?


Maintenant, dans mon application, servant d'un fichier statique ressemble un peu à ceci:

// called via http.ListenAndServe
func switchboard(w http.ResponseWriter, r *http.Request) {

    // snipped dynamic routing...

    // look for static resource
    uri := r.URL.RequestURI()
    if fp, err := os.Open("static" + uri); err == nil {
        defer fp.Close()
        staticHandler(w, r, fp)
        return
    }

    // snipped blackhole route
}

Il est donc assez simple: si le fichier demandé existe dans mon répertoire statique, invoquer le gestionnaire, qui ouvre le fichier et tente de définir un bon Content-Type avant de servir. Ma pensée a été qu'il n'y a pas de raison, ce doit être basée sur le réel du système de fichiers: si il y avait compilé des ressources, je ne pouvais tout simplement l'index par l'URI de la demande et de servir en tant que tel.

Si il n'y a pas une bonne façon de le faire, ou je suis aboiements le mauvais arbre en essayant de le faire, faites le moi savoir. J'ai juste pensé que l'utilisateur pourrait apprécier que peu de fichiers que possible à gérer.

Si il y a plus de balises appropriées que d' , n'hésitez pas à les ajouter ou laissez-moi savoir.

81voto

Daniel Points 9676

Le paquet go-bindata ressemble à ce qui pourrait vous intéresser.

https://github.com/jteeuwen/go-bindata

Cela vous permettra de convertir n'importe quel fichier statique en appel de fonction pouvant être incorporé dans votre code et retournera une tranche d'octet du contenu du fichier lorsqu'il sera appelé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X