Bonjour à tous! Je veux partager ma première expérience de programmation dans Go.
J'ai commencé mon chemin dans la programmation en tant que développeur frontend. Ensuite, je suis passé au backend en Python et, un peu pour moi, à C # Asp.Net MVC. Mais récemment, il y a quelques mois, j'ai rencontré cette belle langue Go.
Pourquoi partir?
1 - langue compilée.
2 est une langue très inhabituelle.
Structures, interfaces ... J'ai dû me casser le cerveau, réapprendre. Et le premier problème, fini, c'est de réapprendre. Où sont les cours? Où est OOP? Où sont tes motifs préférés?
Mais en me cassant un peu la tête, le langage du Go m'a été révélé et j'en suis tombé amoureux. Eh bien, bien sûr, la première chose que j'ai décidé d'écrire mon premier "vélo", à savoir le framework web appelé MGGO.
Ce que je voulais et ce que j'espérais
Bien sûr, j'ai immédiatement voulu créer un framework MVC comme Asp.Net. Mais il s'est avéré que ce n'était pas si simple, car la langue de Go est particulière. Mais voici ce qui s'est passé:
Contrôleurs
Le contrôleur est une structure dans laquelle les méthodes peuvent être à la fois externes (api) et uniquement internes, ainsi que celles qui sont responsables de la vue.
Immédiatement sur un exemple, considérons un contrôleur de nouvelles.
import mggo type News struct{ ID int Title string Text string } func NewNews() *NewNews{ return &NewNews{} } func init() {
Après cela, les nouvelles sont disponibles sur / news /
Où news est le nom du contrôleur et la page principale est index, dont la méthode IndexView est responsable.
Maintenant sur l'api. Le contrôleur de News a une méthode de lecture. Par défaut, ce n'est que du service. Afin de permettre la demande d'api à cette méthode, vous devez ajouter des droits à la méthode dans la fonction de contrôleur "init".
func init(){ ... mggo.AppendRight("News.Read", mggo.RRightGuest) }
Après cela, la méthode Read est disponible pour l'appel de l'API à n'importe quel utilisateur.
fetch("/api/", { "method": "POST", "headers": { 'Accept': 'application/json', 'Content-Type': 'application/json' }, "body": JSON.stringify({ "method": "News.Read", "params": {} }) }).then(res => res.Json()).then(console.log)
Résultat
{result: {ID:1, Title:"First News", Text:"Text first News"}}
Un peu sur les paramètres. Tous les paramètres à l'intérieur de l'objet params seront passés en tant que champs de structure.
Par exemple, modifions légèrement la fonction de lecture:
func(n *News) Read(ctx *mggo.BaseContext) News{ if n.ID ==1 { return News{1, "First News", "Text first News"} } else { return News{} } }
Et l'appel api devrait être avec l'ID de paramètre: 1 - params {ID: 1})
Quoi d'autre?
PostgreSQL
La bibliothèque
Go-pg est connectée dans le framework. Prenons un exemple tout de suite. Notre contrôleur de nouvelles a des données statiques. Cela doit être changé. Pour ce faire, la première chose que vous devez faire est de créer un tableau de News. Ajoutez quelques lignes à la fonction init.
func init(){ ... mggo.InitCallback(func(){ mggo.CreateTable([]interface{}{(*News)(nil)}) }) }
Maintenant, après l'initialisation, nous obtenons le tableau des nouvelles, avec les champs id, title et text.
Modifiez la méthode de lecture:
func(n *News) Read(ctx *mggo.BaseContext) News{ mggo.SQL().Select(n) return *n }
Si nous appelons la méthode News.Read avec le paramètre ID: 1, alors nous obtenons les données de la table de news avec la clé 1.
Les fonctionnalités de Go-pg se trouvent dans la
documentation .
Mais ce n'est pas tout. Tout ne peut pas être décrit ici. J'espère que j'écrirai et publierai bientôt une documentation détaillée. Voici un bref résumé de ce que Mggo peut faire.
⁃ Sockets Web
⁃ Evénements serveur et client
⁃ Résultats de la méthode de mise en cache
⁃ Prise en charge des appels JsonRPC
⁃ Liba pour un contrôleur rapide et la création de vues
C'est tout pour l'instant. J'espère que quelqu'un trouvera l'article utile. Bien sûr, il existe un tas d'autres cadres prêts à l'emploi et sympas. Je voulais juste essayer de faire quelque chose de moi-même pour mon expérience personnelle.
Lien vers le projetLien vers un exemple et démarrage rapide