{"id":80769,"date":"2021-09-01T18:36:52","date_gmt":"2021-09-01T16:36:52","guid":{"rendered":"https:\/\/jfrog.com\/?p=80769"},"modified":"2021-09-01T18:36:52","modified_gmt":"2021-09-01T16:36:52","slug":"top-go-modules-golang-web-apis-with-gorm","status":"publish","type":"post","link":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/","title":{"rendered":"Top Go-Module: Golang-Web-APIs mit GORM"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-full wp-image-64361\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16180948\/Gorm-863x300-1.png\" alt=\"\" width=\"863\" height=\"300\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16180948\/Gorm-863x300-1.png?speedsize=w_863 863w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16180948\/Gorm-863x300-1.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16180948\/Gorm-863x300-1.png?speedsize=w_768 768w\" sizes=\"(max-width: 863px) 100vw, 863px\" \/><\/p>\n<p><span data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;UPDATE: As of May 1, 2021 - GoCenter central repository has been sunset and all features will be deprecated. For more information on the sunsetting of the centers read the deprecation blog post&quot;}\" data-sheets-userformat=\"{&quot;2&quot;:1049089,&quot;3&quot;:{&quot;1&quot;:0},&quot;12&quot;:0,&quot;23&quot;:1}\" data-sheets-textstyleruns=\"{&quot;1&quot;:0}\uee10{&quot;1&quot;:171,&quot;2&quot;:{&quot;2&quot;:{&quot;1&quot;:2,&quot;2&quot;:1136076},&quot;9&quot;:1}}\" data-sheets-hyperlinkruns=\"{&quot;1&quot;:171,&quot;2&quot;:&quot;https:\/\/jfrog.com\/de\/blog\/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter\/&quot;}\uee10{&quot;1&quot;:193}\"><strong>UPDATE:<\/strong> Am 1. Mai 2021 wird das zentrale Repository von GoCenter einschlie\u00dflich aller Funktionen eingestellt. Weitere Informationen zur Einstellung der Center finden Sie im<a class=\"in-cell-link\" href=\"https:\/\/jfrog.com\/de\/blog\/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter\/\" target=\"_blank\" rel=\"noopener noreferrer\"> Blog-Beitrag zur Einstellung<\/a><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #808080\"><b>Jeden Monat verleiht GoCenter den leistungsst\u00e4rksten Modulen ein <\/b><a style=\"color: #808080\" href=\"https:\/\/jfrog.com\/de\/blog\/gocenter-badges-honor-amazing-go-modules\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b>Gopher Badge<\/b><\/a><b> als Auszeichnung f\u00fcr ihre Leistung. Wir schreiben \u00fcber einige dieser <\/b><a style=\"color: #808080\" href=\"https:\/\/github.com\/jfrog\/gocenter\/wiki\/Go-Badge-Awards\" target=\"_blank\" rel=\"noopener noreferrer\"><b>Top-Module<\/b><\/a><b> und wie sie in Go verwendet werden.<\/b><\/span><\/p>\n<p><span style=\"font-weight: 400\">Robert Greiseimer hat Go als die Sprache des Cloud Computing bezeichnet. Es ist zwar kein Geheimnis, dass Go \u00fcber starke Funktionen verf\u00fcgt, die die Anforderungen von Microservice-Architekturen, verteilten Systemen und gro\u00df angelegten Unternehmensanwendungen unterst\u00fctzen, aber was weniger bekannt ist, ist, dass Go von Anfang an auch mit Blick auf die Webentwicklung erstellt wurde. In der Tat verwenden viele Entwickler in der Community Go f\u00fcr die Full-Stack-Entwicklung und bef\u00fcrworten neue Module und Frameworks ein, die Go zu einer starken Sprache f\u00fcr das Web machen. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Werfen wir einen Blick auf einige der M\u00f6glichkeiten, wie Golang und die wachsende Welt der von der Community betriebenen <a href=\"https:\/\/jfrog.com\/de\/blog\/go-modules-are-awesome-but-there-is-one-tiny-problem\/\">Go-Module<\/a> den Datenaustausch in Web-Apps unterst\u00fctzen. Ich zeige auch, wie man mit GoCenter, dem kostenlosen Go-Modul-Proxy f\u00fcr die Entwicklergemeinde, einige wertvolle Module identifizieren kann, und werfe einen detaillierten Blick auf eines meiner Favoriten.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Golang liebt Daten im Web<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Go verf\u00fcgt \u00fcber ausgefeilte Web-Pakete, die Teil seiner Kernbibliothek sind. Mit dem j\u00fcngsten Golang 1.15-Release <\/span><a href=\"https:\/\/golang.org\/doc\/go1.15#library\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">wurde diese Kernbibliothek<\/span><\/a><span style=\"font-weight: 400\"> durch Verbesserungen an <\/span><a href=\"https:\/\/golang.org\/pkg\/database\/sql\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">database\/sql<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/golang.org\/pkg\/database\/sql\/driver\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">database\/sql\/driver<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/golang.org\/pkg\/net\/http\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">net\/http<\/span><\/a><span style=\"font-weight: 400\"> und <\/span><a href=\"https:\/\/golang.org\/pkg\/encoding\/json\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">encoding\/json<\/span><\/a><span style=\"font-weight: 400\"> aktualisiert, sodass Go jetzt noch besser mit Web-Daten arbeiten kann. Diese \u00c4nderungen f\u00fcgen Begrenzungen hinzu, die das Risiko einer \u00dcberbeanspruchung des Stapelspeichers durch gro\u00dfe Mengen von Datendiensten verringern. Au\u00dferdem wurde eine Leerlaufzeit f\u00fcr Datenbankverbindungen festgelegt.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Web-Server-Erstellung<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Go&apos;s <code>net\/http<\/code> -Paket von Go ist Teil der Standardbibliothek und dient dem Transport von HTML vom Server zum Client. Dies geschieht mit Hilfe einer <code>http.Handler<\/code> -Schnittstelle, die ihren eigenen Webserver bildet. Diese Bibliothek macht die RESTful-API-Entwicklung sehr einfach, und mit Go structs k\u00f6nnen Big-Data-Anwendungen auf eine Reihe von verschiedenen Datenbanken und Datentypen abgebildet werden.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Zum Starten des Webdienstes m\u00fcssen das net\/http-Paket importiert und zwei Funktionen geschrieben werden.<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">package main\r\n \r\nimport (\r\n    &quot;fmt&quot;\r\n    &quot;log&quot;\r\n    &quot;net\/http&quot;\r\n)\r\n \r\nfunc homePage(w http.ResponseWriter, r *http.Request){\r\n    fmt.Fprintf(w, &quot;Willkommen auf der HomePage!&quot;)\r\n    fmt.Println(&quot;Endpunkt-Hit: homePage&quot;)\r\n}\r\n \r\nfunc handleRequests() {\r\n    http.HandleFunc(&quot;\/&quot;, homePage)\r\n    log.Fatal(http.ListenAndServe(&quot;:10000&quot;, nil))\r\n}\r\n \r\nfunc main() {\r\n    handleRequests()\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Mit dieser sehr einfachen Datei haben Sie einen funktionierenden Webserver eingerichtet. Dieser Server sendet, speichert und ruft nat\u00fcrlich nicht tats\u00e4chlich Informationen aus dem Web an eine Datenbank ab. Um diese Funktionalit\u00e4t einzubauen, w\u00fcrden wir eine grundlegende CRUD-Anwendung erstellen, die Informationen in Ihrer API <\/span><span style=\"font-weight: 400\">ERSTELLEN<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">LESEN<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">AKTUALISIEREN<\/span><span style=\"font-weight: 400\"> und <\/span><span style=\"font-weight: 400\">L\u00d6SCHEN <\/span><span style=\"font-weight: 400\">kann.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Weitere Details zur Verwendung dieses Pakets f\u00fcr die Erstellung von RESTful-APIs erfahren Sie in einem <\/span><a href=\"https:\/\/tutorialedge.net\/golang\/creating-restful-api-with-golang\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">ausgezeichneten Tutorial von Elliot Forbes<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">JSON<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Eine M\u00f6glichkeit, Informationen zu senden und zu empfangen, ist die Verwendung der Kernbibliothek von Go <\/span><a href=\"https:\/\/golang.org\/pkg\/encoding\/json\/\"><code>encoding\/json<\/code><\/a><span style=\"font-weight: 400\">. Diese Bibliothek macht es einfach, Daten aus JSON in Ihre Go-Anwendungen zu lesen\/schreiben. JSON oder Javascript Object Notation wurde entwickelt, um Daten im Web zu kodieren bzw. zu dekodieren und ist viel besser f\u00fcr das Web geeignet als reines 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\u00e4hrend JSON das Senden von Daten einfach macht, wird weiterhin eine M\u00f6glichkeit ben\u00f6tigt, um mit einer Datenbank wie PostgreSQL zu sprechen. <\/span><\/p>\n<h3><span style=\"font-weight: 400\">Golang ORMs<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Zum Gl\u00fcck hat die Go-Gemeinschaft eine Reihe von Object Relational Mapping-Bibliotheken (ORMs) entwickelt, die es Go-Entwicklern erm\u00f6glichen, JSON-key:value-Paarsyntax und-Kodierung zu verwenden, um direkt auf eine SQL-Datenbank wie PostgreSQL zu mappen. ORMs erm\u00f6glichen es Entwicklern, ihr natives Programmierparadigma zu verwenden, um Daten auf SQL zu mappen. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Ein ORM verwandelt Ihre Datenbankinformationen in Golang-Objekte und umgekehrt. Bei der Arbeit mit einem ORM k\u00f6nnen Sie, anstatt SQL-Abfragen direkt in Ihre Anwendung zu schreiben, Ihre Daten viel besser mit Golang struct wie in diesem Beispiel abbilden:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">\/\/ User struct f\u00fcr meine Datenbank\r\ntype User struct {\r\n   gorm.Model\r\n   firstName string\r\n   lastName string\r\n   email        string\r\n   message      string\r\n   profession   string\r\n   age          int\r\n   zipCode      int\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Nicht jeder ist ein Fan der Verwendung von ORMs, weil sie eine Abstraktionsebene von den eigentlichen Daten in der Datenbank schaffen. Je nachdem, welche Bibliothek Sie verwenden, ist ein weiterer Nachteil, dass, w\u00e4hrend SQL langfristig bleibt, ORM-Frameworks \u00fcber Nacht erscheinen und verschwinden k\u00f6nnen. Aber insgesamt habe ich festgestellt, dass ORMs es viel einfacher machen, die Daten einer Webanwendung in Go im Auge zu behalten und die Menge an langwieriger Codierung zu reduzieren, indem ich einen Haufen SQL-Befehle innerhalb meiner Anwendung gegen etwas austausche, das einfacher zu handhaben ist. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Es gibt eine Reihe von Go-ORMs, die in der Community unterst\u00fctzt und gef\u00f6rdert werden und alle im GoCenter verf\u00fcgbar sind:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><b>XORM<\/b><b>: <\/b><span style=\"font-weight: 400\">Ein einfaches und leistungsf\u00e4higes ORM-Framework f\u00fcr Go<\/span><\/li>\n<li style=\"font-weight: 400\"><b>Go-PG<\/b><b>: <\/b><span style=\"font-weight: 400\">Ein postgreSQL-Client und ORM f\u00fcr Golang<\/span><\/li>\n<li style=\"font-weight: 400\"><b>SQLBOILDER<\/b><b>: <\/b><span style=\"font-weight: 400\">Ein Tool zur Erzeugung eines auf Ihr Datenbankschema zugeschnittenen Go-ORM<\/span><\/li>\n<li style=\"font-weight: 400\"><b>SQLX: <span style=\"font-weight: 400\">Kein ORM, aber ein weiteres ausgezeichnetes Tool f\u00fcr SQL in Go<\/span><\/b><\/li>\n<\/ul>\n<h2>GORM: Ein Top-Gopher<\/h2>\n<p><b>GORM<\/b><span style=\"font-weight: 400\"> ist ein entwicklerfreundlicher ORM, der von <\/span><a href=\"https:\/\/twitter.com\/zhangjinzhu?lang=en\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Jinzhu Zhang<\/span><\/a><span style=\"font-weight: 400\"> entwickelt wurde, mehr als 19.000 Sterne auf GitHub hat, ausgezeichneten Support von der Community erh\u00e4lt und f\u00fcr den es eine <\/span><a href=\"https:\/\/gorm.io\/docs\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">leicht verst\u00e4ndliche Dokumentation gibt<\/span><\/a><span style=\"font-weight: 400\">. GORM erm\u00f6glicht CRUD-Operationen und kann auch f\u00fcr die anf\u00e4ngliche Migration und Erstellung des Datenbankschemas verwendet werden. Zu den weiteren Vorz\u00fcgen von GORM geh\u00f6ren die Erweiterbarkeit mit nativer Plugin-Unterst\u00fctzung, der Einsatz von Tests sowie 1:1- bzw. 1:n-Gruppen von Assoziationen Gorm unterst\u00fctzt au\u00dferdem <\/span><span style=\"font-weight: 400\">sqlite<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">mysql<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">postgres<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">and mssql.<\/span><\/p>\n<div class=\"container\">\n<div class=\"row row-cols-1 row-cols-md-2\">\n<div class=\"col-sm\">Diese Funktionen haben einen gro\u00dfen Anteil daran, dass das GORM-Modul als &quot;Top-Gopher&quot; in GoCenter ausgezeichnet wurde. Wenn Sie die reichhaltigen Metadaten von GoCenter \u00fcber das GORM-Modul betrachten, k\u00f6nnen Sie sehen, warum:<\/div>\n<div class=\"col-sm\"><img decoding=\"async\" class=\"alignnone size-full wp-image-63885\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205610\/Go-Badge.png\" alt=\"\" width=\"200\" height=\"60\" \/><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Die <\/span><b>ReadMe <\/b><span style=\"font-weight: 400\">des Moduls verweist Sie auf eine umfangreiche Dokumentation. Mehr Details \u00fcber den Code des Moduls erfahren wir \u00fcber die <\/span><a href=\"https:\/\/jfrog.com\/de\/blog\/godoc-in-gocenter\/\"><b>GoDoc<\/b><span style=\"font-weight: 400\">-Registerkarte<\/span><\/a><span style=\"font-weight: 400\"><span style=\"font-weight: 400\">, die eine automatisch generierte Dokumentation von Funktionen und mehr zeigt.<\/span><\/span><\/li>\n<li style=\"font-weight: 400\">Die <a href=\"https:\/\/jfrog.com\/de\/blog\/gocenter-connects-go-modules-authors-with-consumers\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b>Used By<\/b>&#8211; und <b>Metrics<\/b>-Registerkarten<\/a> von GoCenter zeigen, dass dieses Modul angesichts vieler Downloads, Forks, Mitwirkenden und der Verwendung durch andere Go-Module beliebt und weithin vertrauensw\u00fcrdig ist.<br \/>\n<img decoding=\"async\" class=\"alignnone size-large wp-image-63886\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205654\/GORM-Metrics-1024x396.png\" alt=\"\" width=\"1024\" height=\"396\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205654\/GORM-Metrics.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205654\/GORM-Metrics.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205654\/GORM-Metrics.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205654\/GORM-Metrics.png?speedsize=w_1501 1501w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Die <\/span><a href=\"https:\/\/jfrog.com\/de\/blog\/gocenter-reveals-go-module-vulnerabilities-with-xray\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b>Security-Registerkarte<\/b><\/a><span style=\"font-weight: 400\"> von GoCenter zeigt auch, dass die aktuelle Version dieses Moduls und seiner Abh\u00e4ngigkeiten keine bekannten NVD-Schwachstellen aufweisen, was durch einen <\/span><a href=\"https:\/\/jfrog.com\/de\/xray-gocenter\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">JFrog Xray-Tiefenscan<\/span><\/a><span style=\"font-weight: 400\"> best\u00e4tigt wird.<br \/>\n<img decoding=\"async\" class=\"alignnone size-large wp-image-63887\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205723\/GORM-Security-1024x205.png\" alt=\"\" width=\"1024\" height=\"205\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205723\/GORM-Security.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205723\/GORM-Security.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205723\/GORM-Security.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03205723\/GORM-Security.png?speedsize=w_1500 1500w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/span><\/li>\n<\/ul>\n<h2><span style=\"font-weight: 400\">GORM verwenden<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Nehmen wir an, Sie wollten eine API (oder sp\u00e4ter eine Webanwendung) erstellen, die Benutzer auffordert, Ihnen ihren Namen, ihre E-Mail-Adresse und eine kurze Nachricht mitzuteilen. Mit GORM w\u00e4re es eine ziemlich einfache Reihe von Schritten, um dies in einer Datenbank abzubilden. Die Schritte:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Einrichten Ihrer Datenbank <\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Abbilden einer User struct<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Verbinden mit der<\/span><b> db<\/b><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Anf\u00e4ngliche Migration auf die <\/span><b>db<\/b><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Einrichten Ihrer Funktionen<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ausf\u00fchren der Anwendung<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400\">GORM Schritt f\u00fcr Schritt<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Nehmen wir an, dass meine Teilzeit-Immobilienmaklerin (oder vielleicht meine Schwester) eine Webanwendung ben\u00f6tigt, die Anfragen zu Immobilien, die sie in unserer Heimatstadt verwaltet, sammeln und speichern kann. Das erste, was ich tun m\u00fcsste, ist eine Datenbank zu entwickeln, die Benutzerinformationen speichern kann, sowie eine Web-API, die diese Informationen \u00fcber ein Kontaktformular sammelt und sp\u00e4ter auf diese Benutzerinformationen zugreifen kann, damit sie in einem Browser gelesen werden k\u00f6nnen. Wir werden einige der wichtigsten Schritte durchgehen, die ich unternommen habe, um diese Art von Anwendung zu entwickeln.<\/span><\/p>\n<h4>Meine Module importieren<\/h4>\n<p><span style=\"font-weight: 400\">Zuerst k\u00f6nnen wir in unserer <\/span><b>main.go<\/b><span style=\"font-weight: 400\">-Datei unsere Module mit den folgenden Befehlen importieren:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">$ export GOPROXY=https:\/\/gocenter.io\r\n$ go get github.com\/jinzhu\/gorm\r\n$ go get github.com\/mattn\/go-sqlite3<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>DB-Verbindungsvariable<\/h4>\n<p><span style=\"font-weight: 400\">Erstellen Sie eine einfache Variable f\u00fcr die GORM-Datenbank:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">var db *gorm.DB<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>User Struct<\/h4>\n<p><span style=\"font-weight: 400\">Wir werden unsere Modelldefinition mit einer Golang struct erstellen, die den Namen des Benutzers, seine E-Mail und die Nachricht abbildet. <\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">\/\/ User struct for my db\r\ntype User struct {\r\n   gorm.Model\r\n   name    string\r\n   email   string\r\n   message string\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Anf\u00e4ngliche Migration f\u00fcr DB<\/h4>\n<p><span style=\"font-weight: 400\">Ich habe meine sqlite-Datenbank <\/span><b>projekt.db <\/b><span style=\"font-weight: 400\">genannt und kann die AutoMigrate-Funktion von GORM mit einer Funktion verwenden, die wie folgt aussieht:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">\/\/ InitialMigration for project with db.AutoMigrate\r\nfunc InitialMigration() {\r\n   db, err = gorm.Open(&quot;sqlite3&quot;, &quot;project.db&quot;)\r\n   if err != nil {\r\n       fmt.Println(err.Error())\r\n       panic(&quot;Verbindung zur Datenbank fehlgeschlagen&quot;)\r\n   }\r\n   defer db.Close()\r\n \r\n   db.AutoMigrate(&amp;User{})\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Handler-Funktion anzeigen<\/h4>\n<p><span style=\"font-weight: 400\">Dadurch k\u00f6nnen wir die API-Daten im Browser sehen:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">func viewHandler(writer http.ResponseWriter, request *http.Request) {\r\n   placeholder := []byte(&quot;Erfolgreich mit der Datenbank verbunden...&quot;)\r\n   _, err := writer.Write(placeholder)\r\n   check(err)\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>API-Funktion<\/h4>\n<p><span style=\"font-weight: 400\">Die API verwendet vier Hauptfunktionen, die es uns erm\u00f6glichen, Benutzer zu finden\/zu bekommen, neue Benutzer hinzuzuf\u00fcgen, Benutzer zu l\u00f6schen und Benutzerinformationen in der Datenbank zu aktualisieren. Diese k\u00f6nnen wie folgt umrissen werden:<\/span><\/p>\n<ul>\n<li>func allUsers<\/li>\n<li>func newUser<\/li>\n<li>func deleteUser<\/li>\n<li>func updateUser<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Diese Funktion stellt z. B. eine Verbindung zur Datenbank her und zeigt alle Eintr\u00e4ge f\u00fcr Benutzer an:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">func allUsers(w http.ResponseWriter, r *http.Request) {\r\n   db, err := gorm.Open(&quot;sqlite3&quot;, &quot;projekt.db&quot;)\r\n   if err != nil {\r\n       panic(&quot;Verbindung zur Datenbank fehlgeschlagen&quot;)\r\n   }\r\n   defer db.Close()\r\n \r\n   var users []Benutzer\r\n   db.Find(&amp;users)\r\n   fmt.Println(&quot;{}&quot;, users)\r\n \r\n   json.NewEncoder(w).Encode(users)\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Router<\/h4>\n<p><span style=\"font-weight: 400\">Nachdem jede der obigen Funktionen erstellt wurde, w\u00fcrde die Funktion f\u00fcr das Routing wie folgt aussehen:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">func handleRequests() {\r\n   myRouter := mux.NewRouter().StrictSlash(true)\r\n   myRouter.HandleFunc(&quot;\/users&quot;, allUsers).Methods(&quot;GET&quot;)\r\n   myRouter.HandleFunc(&quot;\/user\/{name}&quot;, deleteUser).Methods(&quot;DELETE&quot;)\r\n   myRouter.HandleFunc(&quot;\/user\/{name}\/{email}&quot;, updateUser).Methods(&quot;PUT&quot;)\r\n   myRouter.HandleFunc(&quot;\/user\/{name}\/{email}&quot;, newUser).Methods(&quot;POST&quot;)\r\n   myRouter.HandleFunc(&quot;\/user\/{name}\/{email}\/{message}&quot;, updateUser).Methods(&quot;PUT&quot;)\r\n   myRouter.HandleFunc(&quot;\/user\/{name}\/{email}\/{message}&quot;, newUser).Methods(&quot;POST&quot;)\r\n   log.Fatal(http.ListenAndServe(&quot;:8081&quot;, myRouter))\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Hauptfunktion<\/h4>\n<p><span style=\"font-weight: 400\">Zuletzt k\u00f6nnen Sie die Anwendung ausf\u00fchren, indem Sie Folgendes in Ihrer Hauptfunktion platzieren:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">func main() {\r\n   fmt.Println(&quot;GORM API-Projekt gestartet&quot;)\r\n   initialMigration()\r\n   handleRequests()\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Anwendung ausf\u00fchren<\/h4>\n<p><span style=\"font-weight: 400\">Dann werden wir unter Verwendung von <code>go run main.go<\/code>, <span style=\"font-weight: 400\">die Reaktion sehen:<\/span><\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">GORM-API-Projekt gestartet<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Und wenn ich ein paar Anfragen an meine API POSTE, kann ich diese Anfrage BEKOMMEN und die Daten im Browser sehen:<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-large wp-image-63893\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03211425\/GORM-Run-1024x238.png\" alt=\"\" width=\"1024\" height=\"238\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03211425\/GORM-Run.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03211425\/GORM-Run.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03211425\/GORM-Run.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03211425\/GORM-Run.png?speedsize=w_1536 1536w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/03211425\/GORM-Run.png?speedsize=w_1999 1999w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h3><span style=\"font-weight: 400\">Tiefer in das Thema eintauchen<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Als Go-Entwickler, der GORM zum ersten Mal verwendet, war die Migration und das Mapping von Daten in eine Sqlite-Datenbank sehr einfach. Der obige Code ist nur eine Momentaufnahme, um Ihnen den Einstieg zu erleichtern.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Weitere Informationen zur <\/span><span style=\"font-weight: 400\">Verwendung von GORM zur Erstellung von APIs <\/span>finden Sie in<a href=\"https:\/\/tutorialedge.net\/golang\/golang-orm-tutorial\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">diesem ausgezeichneten und umfassenden Tutorial mit Video von Elliot Forbes<\/span><\/a><span style=\"font-weight: 400\">. <\/span><span style=\"font-weight: 400\">\u00a0Vergessen Sie nicht, sich bei <\/span><a href=\"https:\/\/twitter.com\/Elliot_f\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Elliot auf Twitter<\/span><\/a><span style=\"font-weight: 400\"> f\u00fcr sein wunderbares Tutorial zu bedanken, das jeden Aspekt der Golang-APIs beleuchtet.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">GORM v2 ist nun ebenfalls ver\u00f6ffentlicht und wird f\u00fcr \u00f6ffentliche Tests verwendet. <\/span><\/p>\n<h2>Fazit<\/h2>\n<p><span style=\"font-weight: 400\">Zu den St\u00e4rken von Go in der Web-API-Entwicklung geh\u00f6ren seine Geschwindigkeit und Skalierbarkeit, was im Zeitalter des Machine Learning ziemlich wichtig ist. Go wurde in der \u00c4ra der Mehrkernprozessoren entwickelt und verwendet <\/span><i><span style=\"font-weight: 400\">Goroutinen<\/span><\/i><span style=\"font-weight: 400\">, um Aufgaben gleichzeitig durch mehrere Kan\u00e4le auf mehreren CPUs zu f\u00fchren. Das bedeutet, dass es die Skalierung und Infrastruktur bew\u00e4ltigen kann, die f\u00fcr gro\u00dfe Datenanwendungen erforderlich ist, und Millionen von HTTP-Anfragen gleichzeitig verarbeiten kann. Au\u00dferdem ist es statisch typisiert und seine strenge Syntax macht es viel einfacher, Fehler zu debuggen und zu verhindern, die weniger strenge Sprachen mit riesigen Bibliotheken wie Javascript einf\u00fchren k\u00f6nnten. Aus diesem Grund haben sich Unternehmen von Uber bis DropBox als Sprache der Wahl f\u00fcr APIs und zur Skalierung ihrer webf\u00e4higen Anwendungen f\u00fcr Go entschieden. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Sollten Sie die API-F\u00e4higkeiten von Go ausprobieren wollen, ist die Erstellung einer eigenen Web-API mit ORMs wie GORM ein guter Anfang.<\/span><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>UPDATE: Am 1. Mai 2021 wird das zentrale Repository von GoCenter einschlie\u00dflich aller Funktionen eingestellt. Weitere Informationen zur Einstellung der Center finden Sie im Blog-Beitrag zur Einstellung &nbsp; Jeden Monat verleiht GoCenter den leistungsst\u00e4rksten Modulen ein Gopher Badge als Auszeichnung f\u00fcr ihre Leistung. Wir schreiben \u00fcber einige dieser Top-Module und wie sie in Go verwendet &hellip;<\/p>\n","protected":false},"author":140,"featured_media":64362,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[9969],"tags":[9437,9438],"class_list":["post-80769","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artefakt-management","tag-go-module","tag-gocenter-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.6 (Yoast SEO v22.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Das GORM-Go-Modul f\u00fcr Web-APIs in Golang verwenden | JFrog GoCenter<\/title>\n<meta name=\"description\" content=\"Lernen Sie die ORM-Bibliotheken (Object Relational Mapping) f\u00fcr den Datenaustausch zwischen SQL und Golang kennen und erfahren Sie, wie Sie das GORM-Go-Modul f\u00fcr CRUD-Operationen in Web-APIs einsetzen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/posts\/80769\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Das GORM-Go-Modul f\u00fcr Web-APIs verwenden\" \/>\n<meta property=\"og:description\" content=\"Vorhang auf f\u00fcr einige der Top-Gopher-Preistr\u00e4ger im JFrog GoCenter! Zuerst wird gezeigt, wie man mit GORM Web-APIs in Golang erstellt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/\" \/>\n<meta property=\"og:site_name\" content=\"JFrog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/artifrog\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-01T16:36:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181126\/Gorm-Social.png\" \/>\n<meta name=\"author\" content=\"giannit\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Top Go-Module: Golang-Web-APIs mit GORM\" \/>\n<meta name=\"twitter:description\" content=\"Vorhang auf f\u00fcr einige der Top-Gopher-Preistr\u00e4ger im JFrog GoCenter! Zuerst wird gezeigt, wie man mit GORM Web-APIs in Golang erstellt.\" \/>\n<meta name=\"twitter:creator\" content=\"@jfrog\" \/>\n<meta name=\"twitter:site\" content=\"@jfrog\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"giannit\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/\"},\"author\":{\"name\":\"giannit\",\"@id\":\"https:\/\/jfrog.com\/de\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\"},\"headline\":\"Top Go-Module: Golang-Web-APIs mit GORM\",\"datePublished\":\"2021-09-01T16:36:52+00:00\",\"dateModified\":\"2021-09-01T16:36:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/\"},\"wordCount\":1654,\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png\",\"keywords\":[\"Go-Module\",\"gocenter\"],\"articleSection\":[\"Artefakt-Management\"],\"inLanguage\":\"de-DE\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/\",\"url\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/\",\"name\":\"Das GORM-Go-Modul f\u00fcr Web-APIs in Golang verwenden | JFrog GoCenter\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png\",\"datePublished\":\"2021-09-01T16:36:52+00:00\",\"dateModified\":\"2021-09-01T16:36:52+00:00\",\"description\":\"Lernen Sie die ORM-Bibliotheken (Object Relational Mapping) f\u00fcr den Datenaustausch zwischen SQL und Golang kennen und erfahren Sie, wie Sie das GORM-Go-Modul f\u00fcr CRUD-Operationen in Web-APIs einsetzen.\",\"breadcrumb\":{\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb\"},\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png\",\"width\":203,\"height\":148,\"caption\":\"Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jfrog.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Top Go-Module: Golang-Web-APIs mit GORM\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jfrog.com\/de\/#website\",\"url\":\"https:\/\/jfrog.com\/de\/\",\"name\":\"JFrog\",\"description\":\"Deliver Trusted Software Releases at Speed and Scale\",\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jfrog.com\/de\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de-DE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jfrog.com\/de\/#organization\",\"name\":\"JFrog\",\"url\":\"https:\/\/jfrog.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\/\/jfrog.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"width\":74,\"height\":73,\"caption\":\"JFrog\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/artifrog\",\"https:\/\/x.com\/jfrog\",\"https:\/\/www.linkedin.com\/company\/455737\",\"https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg\",\"https:\/\/www.wikidata.org\/wiki\/Q98608948\"],\"description\":\"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.\",\"legalName\":\"Jfrog, Inc.\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1001\",\"maxValue\":\"5000\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jfrog.com\/de\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\",\"name\":\"giannit\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\/\/jfrog.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g\",\"caption\":\"giannit\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Das GORM-Go-Modul f\u00fcr Web-APIs in Golang verwenden | JFrog GoCenter","description":"Lernen Sie die ORM-Bibliotheken (Object Relational Mapping) f\u00fcr den Datenaustausch zwischen SQL und Golang kennen und erfahren Sie, wie Sie das GORM-Go-Modul f\u00fcr CRUD-Operationen in Web-APIs einsetzen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/posts\/80769","og_locale":"de_DE","og_type":"article","og_title":"Das GORM-Go-Modul f\u00fcr Web-APIs verwenden","og_description":"Vorhang auf f\u00fcr einige der Top-Gopher-Preistr\u00e4ger im JFrog GoCenter! Zuerst wird gezeigt, wie man mit GORM Web-APIs in Golang erstellt.","og_url":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/","og_site_name":"JFrog","article_publisher":"https:\/\/www.facebook.com\/artifrog","article_published_time":"2021-09-01T16:36:52+00:00","og_image":[{"url":"https:\/\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181126\/Gorm-Social.png"}],"author":"giannit","twitter_card":"summary_large_image","twitter_title":"Top Go-Module: Golang-Web-APIs mit GORM","twitter_description":"Vorhang auf f\u00fcr einige der Top-Gopher-Preistr\u00e4ger im JFrog GoCenter! Zuerst wird gezeigt, wie man mit GORM Web-APIs in Golang erstellt.","twitter_creator":"@jfrog","twitter_site":"@jfrog","twitter_misc":{"Written by":"giannit","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#article","isPartOf":{"@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/"},"author":{"name":"giannit","@id":"https:\/\/jfrog.com\/de\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af"},"headline":"Top Go-Module: Golang-Web-APIs mit GORM","datePublished":"2021-09-01T16:36:52+00:00","dateModified":"2021-09-01T16:36:52+00:00","mainEntityOfPage":{"@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/"},"wordCount":1654,"publisher":{"@id":"https:\/\/jfrog.com\/de\/#organization"},"image":{"@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png","keywords":["Go-Module","gocenter"],"articleSection":["Artefakt-Management"],"inLanguage":"de-DE"},{"@type":"WebPage","@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/","url":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/","name":"Das GORM-Go-Modul f\u00fcr Web-APIs in Golang verwenden | JFrog GoCenter","isPartOf":{"@id":"https:\/\/jfrog.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage"},"image":{"@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png","datePublished":"2021-09-01T16:36:52+00:00","dateModified":"2021-09-01T16:36:52+00:00","description":"Lernen Sie die ORM-Bibliotheken (Object Relational Mapping) f\u00fcr den Datenaustausch zwischen SQL und Golang kennen und erfahren Sie, wie Sie das GORM-Go-Modul f\u00fcr CRUD-Operationen in Web-APIs einsetzen.","breadcrumb":{"@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb"},"inLanguage":"de-DE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/"]}]},{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2020\/09\/16181017\/Gorm-203x148-1.png","width":203,"height":148,"caption":"Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/jfrog.com\/de\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jfrog.com\/de\/"},{"@type":"ListItem","position":2,"name":"Top Go-Module: Golang-Web-APIs mit GORM"}]},{"@type":"WebSite","@id":"https:\/\/jfrog.com\/de\/#website","url":"https:\/\/jfrog.com\/de\/","name":"JFrog","description":"Deliver Trusted Software Releases at Speed and Scale","publisher":{"@id":"https:\/\/jfrog.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jfrog.com\/de\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de-DE"},{"@type":"Organization","@id":"https:\/\/jfrog.com\/de\/#organization","name":"JFrog","url":"https:\/\/jfrog.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/jfrog.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","width":74,"height":73,"caption":"JFrog"},"image":{"@id":"https:\/\/jfrog.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/artifrog","https:\/\/x.com\/jfrog","https:\/\/www.linkedin.com\/company\/455737","https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg","https:\/\/www.wikidata.org\/wiki\/Q98608948"],"description":"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.","legalName":"Jfrog, Inc.","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1001","maxValue":"5000"}},{"@type":"Person","@id":"https:\/\/jfrog.com\/de\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af","name":"giannit","image":{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/jfrog.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g","caption":"giannit"}}]}},"_links":{"self":[{"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/posts\/80769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/users\/140"}],"replies":[{"embeddable":true,"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/comments?post=80769"}],"version-history":[{"count":1,"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/posts\/80769\/revisions"}],"predecessor-version":[{"id":80772,"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/posts\/80769\/revisions\/80772"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/media\/64362"}],"wp:attachment":[{"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/media?parent=80769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/categories?post=80769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jfrog.com\/de\/wp-json\/wp\/v2\/tags?post=80769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}