顶级Go-Module: Golang-Web-APIs mit GORM

更新:我1。Mai 2021 wd das zentrale Repository von GoCenter einschließlich aller Funktionen eingestellt。Weitere information zur einstein der Center找到了你博客- beitrag zur einstein

Jeden Monat verleiht GoCenter den leistungsstärksten Modulen ein金花鼠徽章als Auszeichnung für ihre Leistung。Wir schreiben über einige柴油机Top-Module和我在一起。

Robert Greiseimer hat Go als die Sprache des Cloud Computing bezeichnet。Es ist zwar kein Geheimnis, dass Go über starke Funktionen verfügt, die die Anforderungen von micro服务- architekturen, verteilten Systemen und groß angelegten Unternehmensanwendungen unterstützen, aber was weniger bekannt ist, ist, der Go von Anfang and auch mit Blick auf die Webentwicklung erstellt wurde。在der Tat verwenden viele Entwickler In der Community Go für die Full-Stack-Entwicklung und befürworten neue Module und Frameworks ein, die Go zu einer starken Sprache für das Web machen。

我们的世界Möglichkeiten,我们的世界和我们的社会的世界Go-Moduleden Datenaustausch在web应用程序unterstützen。Ich zeige auch, wie man mit GoCenter, dem kostenlosen go - Module - proxy für die Entwicklergemeinde, einige wertvolle Module identifiieren kann, und werfe einen detaillierten Blick auf eines meiner Favoriten。

Golang liebt Daten im Web

去verfügt über ausgefeilte Web-Pakete, die Teil seiner Kernbibliothek sind。Mit dem jüngsten Golang 1.15-Releasewurde diese Kernbibliothekdurch Verbesserungen an数据库/ sql数据库/ sql /司机net/http编码/ jsonaktualisiert,苏打水去jetzt noch besser mit Web-Daten arbeiten kann。Diese Änderungen fügen Begrenzungen hinzu, die das Risiko einer Überbeanspruchung des Stapelspeichers durch große Mengen von Datendiensten verringern。Außerdem wurde eine Leerlaufzeit für datenbankverindungen festgelegt。

Web-Server-Erstellung

去的net/http-Paket von Go ist Teil der Standardbibliothek und dient dem Transport von HTML vom Server zum Client。Hilfe einer去世了http。处理程序-Schnittstelle, die ihren eigenen Webserver bildet。Diese Bibliothek macht die rest - api - entwicklung sehr einfach and mit Go structs können大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据-大数据

Zum start ten des Webdienstes müssen das net/http-Paket import und zwei Funktionen geschrieben werden。

package main import ("fmt" "log" "net/http")ResponseWriter, r *http.Request){fmt. request;Fprintf(w, "Willkommen auf der HomePage!")Println("Endpunkt-Hit:主页")}func handleRequests() {http. request ()HandleFunc("/",主页)日志。ListenAndServe(":10000", nil))} func main() {handleRequests()}

Mit diesel sehr einfachen Datei haben Sie einen funktionierenden Webserver eingerhet。diesel Server senddet, speichert und ruft natürlich nicht tatsächlich Informationen ausdem Web an eine Datenbank ab. Um diese Funktionalität einzubauen, würden wir eine grundlegende CRUD-Anwendung erstellen, die Informationen in Ihrer APIERSTELLEN革命AKTUALISIERENLOSCHEN萤石。

Weitere Details zur Verwendung dieses Pakets für die Erstellung von rest - apis erfahren Sie in einem教程冯艾略特福布斯

JSON

Eine Möglichkeit,关于国家图书馆的信息,关于国家图书馆的信息编码/ json.Diese图书馆macht es einfach, Daten aus JSON在Ihre - goanwendungen zu lesen/schreiben。JSON oder Javascript对象符号wurde entwickelt, um Daten im Web zu kodieren bzw。zu dekodieren und ist viel besser für das Web geeignet als控制XML。Durch die Verwendung von key:value-Paaren liest sich JSON eher wie Klartext und sein lesbares Datenformat kann beim Aufbau Ihrer Full-Stack-Anwendungen auf eine Weise genutzt werden, die langwieriges SQL vermeidet。Während JSON das Senden von Daten einfach macht, wid weiterhin eine Möglichkeit benötigt, um mit einer Datenbank wie PostgreSQL zu sprechen。

Golang orm

Zum Glück hat die Go-Gemeinschaft eine Reihe von Object Relational Mapping-Bibliotheken (ORMs) entwickelt, die es Go-Entwicklern ermöglichen, JSON-key:value-Paarsyntax und-Kodierung zu verwenden, um direkt auf eine SQL-Datenbank wie PostgreSQL zu mappen。ORMs ermöglichen es Entwicklern, ihr natives程序范例zu verwenden,嗯Daten auf SQL zu mappen。

在Golang-Objekte and umgekehrt的Ein ORM verwandelt Ihre Datenbankinformationen。在这里工作können在这里工作,在这里工作,在这里工作können在这里工作,在这里工作:

//用户结构für meine Datenbank类型用户结构{gorm。型号firstName string lastName string电子邮件字符串消息字符串职业字符串年龄int zipCode int}

在世界上有一个伟大的世界,在世界上有一个伟大的世界。Je nachdem, welche Bibliothek Sie verwenden, ist ein weiterer Nachteil, dass, während SQL langfristig bleibt, ORM-Frameworks über Nacht erscheinen und verschwinden können。河口insgesamt有我festgestellt, dass orm es这回einfacher麦臣,死Daten静脉Webanwendung在我去奥格祖茂堂behalten和死门格一个langwieriger Codierung祖reduzieren indem我杯Haufen SQL-Befehle innerhalb我Anwendung对战要austausche, das einfacher祖茂堂handhaben坚持。

Es gibt eine Reihe von Go-ORMs, die in der Community unterstützt und gefördert werden und alle im GoCenter verfügbar信德:

  • XORMEin einfaches und leistungsfähiges ORM-Framework für Go
  • Go-PGEin postgreSQL-Client und ORM für Golang
  • SQLBOILDEREin Tool zur Erzeugung eines auf Ihr Datenbankschema zugeschnittenen Go-ORM
  • SQLX:Kein ORM, aber ein weiteres ausgezeichnetes工具für SQL in Go

GORM: Ein Top-Gopher

弄脏ist ein entwicklerfreundlicher ORM, der vonJinzhu张entwickelt wurde, mehr als 19.000 Sterne auf GitHub hat, ausgezeichneten支持von der社区erhält und für den es eineleicht verständliche Dokumentation gibt.GORM ermöglicht CRUD-Operationen und kann auch für die anfängliche移民和Erstellung des Datenbankschemas verwendet werden。祖登weiteren Vorzügen von GORM gehören die Erweiterbarkeit mit nativer Plugin-Unterstützung, der Einsatz von Tests sowie 1:1- bzw。1:n-Gruppen von Assoziationen Gorm unterstützt außerdemsqlitemysqlpostgres和该软件。

Diese Funktionen haben einen großen Anteil daran, dass das GORM-Modul als“顶级地鼠”在GoCenter ausgezeichnet wurde。Wenn Sie die reichhaltigen Metadaten von GoCenter über das gorm - module betrachten, können Sie sehen, warum:

  • 自述“你的auf eine umfangreche Dokumentation”。Mehr详细信息über den模块代码erfahren wir über dieGoDoc-Registerkarte,这是一种自动生成的信息系统,在Funktionen和mehr zeigt
  • 所使用的——和指标-Registerkartenvon GoCenter zeigen, dass dieses module angesichts vieler下载,fork, Mitwirkenden und der Verwendung durch andere Go-Module信仰und weithin vertrauenswürdig ist。
  • Security-Registerkartevon GoCenter zeigt auch, dass die aktuelle Version dieses modules und seiner Abhängigkeiten keine bekannten NVD-Schwachstellen aufweisen, was durch einenJFrog Xray-Tiefenscanbestatigt将。

GORM verwenden

Nehmen wir, Sie wollten eine API (oder später eine Webanwendung) erstellen, die Benutzer auffordert, Ihnen ihren Namen, ihre e - mail - address and eine kurze Nachricht mitzuteilen。Mit GORM wäre es eine ziemlich einfache Reihe von Schritten,嗯死于abzubilden einer Datenbank。死Schritte:

  • Einrichten Ihrer Datenbank
  • Abbilden einer用户结构
  • Verbinden mit derdb
  • Anfängliche迁移auf diedb
  • Einrichten Ihrer Funktionen
  • Ausführen der安文东

GORM Schritt für Schritt

Nehmen wir an, dass meine teilzeit - inmobililienmaklerin (oder vielleicht meine Schwester) eine Webanwendung benötigt, die Anfragen zu inmobililien, die sie in unserer Heimatstadt verwaltet, sammeln and speichern kann。Das erste, was ich tun müsste, ist eine Datenbank zu entwickeln, die Benutzerinformationen speichern kann, sowie eine Web-API, die diese Informationen über ein kontaktformula sammelt und später auf diese Benutzerinformationen zugreifen kann, damit sie in einem Browser gelesen werden können。我们的世界,我们的世界,我们的世界,我们的世界,我们的世界,我们的世界。

我的模块很重要

Zuerst können wir in unserermain.go-Datei unsere模块mit den folgenden Befehlen importen:

$ export GOPROXY=https://gocenter。IO $ go get github.com/jinzhu/gorm $ go get github.com/mattn/go-sqlite3

DB-Verbindungsvariable

Erstellen Sie eine einfache变量für die GORM-Datenbank:

var db *gorm.DB

用户结构

模型定义,模型定义,模型定义,模型定义,模型定义。

//我的数据库类型的用户结构{gorm。模型名称字符串电子邮件字符串消息字符串

Anfängliche迁移für DB

我有我的住处projekt.dbgenant and kann die automigore -Funktion von GORM mit einer Funktion verwenden, die wie folgt aussieht:

//初始化迁移项目与db。自动igrate func InitialMigration() {db, err = gorm。打开("sqlite3", "project.db") if err != nil {fmt.Println(err. error ()) panic("Verbindung zur Datenbank fehlgeschlagen")} defer db.Close() db.AutoMigrate(&User{})}

Handler-Funktion anzeigen

Dadurch können wir die API-Daten im Browser sehen

func viewHandler(写入http。ResponseWriter, request *http.Request){占位符:= []byte("Erfolgreich mit der Datenbank verbunden…")_,err:= writer.Write(占位符)check(err)}

API-Funktion

德国大森林,森林ermöglichen,新森林hinzuzufügen,新森林löschen和德国大森林的信息。Diese können魏福尔特乌姆里森werden:

  • 函数的权限
  • 函数分类列出
  • func deleteUser
  • func updateUser

祝你生日快乐,生日快乐Einträge für贝努策安:

func allUsers(w http。ResponseWriter, r *http.Request) {db, err:= gorm。打开("sqlite3", " project .db") if err != nil {panic("Verbindung zur Datenbank fehlgeschlagen")} defer db.Close() var users []Benutzer db.Find(&users) fmt. db.Find(&users)Println("{}", users) json.NewEncoder(w).Encode(users)}

路由器

舞会,würde舞会für das Routing wie folgt aussehen:

func handleRequests() {myRouter:= mux.NewRouter(). strictslash (true) myRouter. func handleRequests() {myRouter:= mux.NewRouter(). strictslash (true)HandleFunc("/users", allUsers). methods ("GET")HandleFunc("/user/{name}", deleteUser). methods ("DELETE")HandleFunc("/user/{name}/{email}", updateUser). methods ("PUT")HandleFunc("/user/{name}/{email}", newUser). methods ("POST")HandleFunc("/user/{name}/{email}/{message}", updateUser). methods ("PUT")HandleFunc("/user/{name}/{email}/{message}", newUser). methods ("POST") log.Fatal(http。ListenAndServe(":8081", myRouter))}

Hauptfunktion

Zuletzt können Sie die Anwendung ausführen, inm Sie Folgendes in Ihrer Hauptfunktion platzieren:

Func main() {fmt. {fmt.}Println("GORM API-Projekt gestartt ") initialMigration() handleRequests()}

Anwendung ausfuhren

这是我们的世界快跑,曼恩,快跑die Reaktion sehen:

GORM-API-Projekt gestartet

我的API POSTE, kann diese Anfrage BEKOMMEN Und die Daten im Browser sehen:

在das Thema eintauchen的Tiefer

Als Go-Entwickler, der GORM zum ersten Mal verwendet, war die Migration and das Mapping von Daten in eine Sqlite-Datenbank sehr einfach。那是我的密码,那是我的名字,那是我的名字。

Weitere Informationen zur关于APIs的问题找到Sie在diesem ausgezeichneten und umfassenden教程mit视频冯艾略特福布斯维格森你晚上见,我也见Elliot auf Twitterfür sein wunderbares Tutorial zu bedanken, das jeden Aspekt der Golang-APIs beleuchtet。

GORM v2 ist nun ebenfalls veröffentlicht und word für öffentliche测试verwendet。

Fazit

Zu den Stärken von Go in der Web-API-Entwicklung gehören seine Geschwindigkeit und Skalierbarkeit,是im Zeitalter des Machine Learning ziemlich wictig ist。Go wurde in der Ära der Mehrkernprozessoren entwickelt und verwendetGoroutinen,嗯Aufgaben gleichzeeitig durch mehere Kanäle auf mehren cpu zu führen。Das bedeutet, dass es die Skalierung和基础设施bewältigen kann, die für große Datenanwendungen erforderlich ist, und Millionen von HTTP-Anfragen gleichzeeitig verarbeiten kann。Außerdem ist es statisch typisiert und seine strenge语法macht es viel einfacher, Fehler zu debuggen und zu verhindern, die weniger strenge Sprachen mit riesigen Bibliotheken wie Javascript einführen könnten。ausdiesem Grund haben sich Unternehmen von Uber bis DropBox als Sprache der Wahl für api und zur Skalierung ihrer webfähigen Anwendungen für Go entschieden。

Sollten Sie die API-Fähigkeiten von Go ausprobieren wollen, ist die Erstellung einer eigenen Web-API mit ORMs wie GORM ein guter Anfang。