Hallo allerseits! Ich möchte meine ersten Programmiererfahrungen in Go teilen.
Ich habe als Frontend-Entwickler angefangen zu programmieren. Dann wechselte ich in Python zum Backend und ein wenig zu C # Asp.Net MVC. Aber vor ein paar Monaten habe ich diese schöne Sprache Go kennengelernt.
Warum gehen?
1 - kompilierte Sprache.
2 ist eine sehr ungewöhnliche Sprache.
Strukturen, Schnittstellen ... Ich musste mein Gehirn brechen, neu lernen. Und das erste Problem ist, neu zu lernen. Wo sind die Klassen? Wo ist OOP? Wo sind deine Lieblingsmuster?
Aber als ich mir ein wenig den Kopf brach, wurde mir die Go-Sprache offenbart und ich liebte sie. Nun, natürlich war das erste, was ich beschlossen habe, mein erstes "Fahrrad" zu schreiben, nämlich das Web-Framework namens MGGO.
Was ich wollte und was ich anstrebte
Natürlich wollte ich sofort ein MVC-Framework wie Asp.Net erstellen. Aber es stellte sich als nicht so einfach heraus, weil die Go-Sprache eigenartig ist. Aber hier ist was passiert:
Controller
Der Controller ist eine Struktur, in der Methoden sowohl extern (api) als auch nur intern sein können sowie diejenigen, die für die Ansicht verantwortlich sind.
Betrachten Sie sofort ein Nachrichten-Controller.
import mggo type News struct{ ID int Title string Text string } func NewNews() *NewNews{ return &NewNews{} } func init() {
Danach sind die Nachrichten unter / news / verfügbar
Dabei ist news der Name des Controllers und die Hauptseite der Index, für den die IndexView-Methode verantwortlich ist.
Nun zu API. Der News-Controller verfügt über eine Lesemethode. Standardmäßig ist es nur Service. Um eine API-Anforderung für diese Methode zuzulassen, müssen Sie der Methode in der Controller-Funktion "init" Rechte hinzufügen.
func init(){ ... mggo.AppendRight("News.Read", mggo.RRightGuest) }
Danach steht die Read-Methode jedem Benutzer zum Aufruf der API zur Verfügung.
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)
Ergebnis
{result: {ID:1, Title:"First News", Text:"Text first News"}}
Ein bisschen über die Parameter. Alle Parameter im params-Objekt werden als Strukturfelder übergeben.
Lassen Sie uns zum Beispiel die Lesefunktion leicht ändern:
func(n *News) Read(ctx *mggo.BaseContext) News{ if n.ID ==1 { return News{1, "First News", "Text first News"} } else { return News{} } }
Und der API-Aufruf sollte mit der Parameter-ID erfolgen: 1 - params {ID: 1})
Was sonst?
PostgreSQL
Die Go-pg- Bibliothek ist im Framework verbunden. Lassen Sie uns gleich ein Beispiel geben. Unser News Controller verfügt über statische Daten. Es muss geändert werden. Dazu müssen Sie zunächst eine News-Tabelle erstellen. Fügen Sie der Init-Funktion einige Zeilen hinzu.
func init(){ ... mggo.InitCallback(func(){ mggo.CreateTable([]interface{}{(*News)(nil)}) }) }
Nach der Initialisierung erhalten wir nun die Nachrichtentabelle mit den Feldern ID, Titel und Text.
Ändern Sie die Read-Methode:
func(n *News) Read(ctx *mggo.BaseContext) News{ mggo.SQL().Select(n) return *n }
Wenn wir die News.Read-Methode mit der Parameter-ID: 1 aufrufen, erhalten wir als Ergebnis die Daten aus der Nachrichtentabelle mit Schlüssel 1.
Go-pg-Funktionen finden Sie in der
Dokumentation .
Das ist aber noch nicht alles. Hier kann nicht alles beschrieben werden. Hoffentlich werde ich bald eine detaillierte Dokumentation schreiben und veröffentlichen. Hier ist eine kurze Zusammenfassung dessen, was Mggo tun kann.
⁃ Web-Sockets
⁃ Server- und Clientereignisse
⁃ Ergebnisse der Caching-Methode
⁃ Unterstützt JsonRPC-Aufrufe
⁃ Liba für die schnelle Steuerung und Ansichtserstellung
Das ist alles für jetzt. Ich hoffe, jemand wird den Artikel nützlich finden. Natürlich gibt es eine Reihe anderer vorgefertigter und cooler Frameworks. Ich wollte nur versuchen, etwas Eigenes für meine persönliche Erfahrung zu tun.
Link zum ProjektLink zu einem Beispiel und Schnellstart