{"id":79891,"date":"2021-08-08T15:53:27","date_gmt":"2021-08-08T13:53:27","guid":{"rendered":"https:\/\/jfrog.com\/?p=79891"},"modified":"2021-08-08T15:55:01","modified_gmt":"2021-08-08T13:55:01","slug":"top-go-modules-golang-web-apis-with-gorm","status":"publish","type":"post","link":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/","title":{"rendered":"Principaux modules Go\u00a0: API Web Golang avec 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\/blog\/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter\/&quot;}\uee10{&quot;1&quot;:193}\"><strong>MISE \u00c0 JOUR\u00a0:<\/strong> \u00c0 compter du 1er\u00a0mai\u00a02021, le d\u00e9p\u00f4t central GoCenter a \u00e9t\u00e9 mis hors service et toutes ses fonctionnalit\u00e9s seront obsol\u00e8tes. Pour en savoir plus sur la mise hors service des centres, lisez<a class=\"in-cell-link\" href=\"https:\/\/jfrog.com\/fr\/blog\/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter\/\" target=\"_blank\" rel=\"noopener noreferrer\"> l&apos;article de blog sur la d\u00e9pr\u00e9ciation<\/a><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #808080\"><b>Chaque mois, GoCenter d\u00e9cerne aux modules les plus performants un <\/b><a style=\"color: #808080\" href=\"https:\/\/jfrog.com\/blog\/gocenter-badges-honor-amazing-go-modules\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b>badge Gopher<\/b><\/a><b> qui reconna\u00eet leur r\u00e9ussite. Cet article mentionne quelques-uns de ces <\/b><a style=\"color: #808080\" href=\"https:\/\/github.com\/jfrog\/gocenter\/wiki\/Go-Badge-Awards\" target=\"_blank\" rel=\"noopener noreferrer\"><b>meilleurs modules<\/b><\/a><b> et leur utilisation dans Go.<\/b><\/span><\/p>\n<p><span style=\"font-weight: 400\">Robert Greiseimer a donn\u00e9 le nom de Go au langage du Cloud computing. Bien qu&apos;il ne soit un secret pour personne que Go poss\u00e8de des fonctionnalit\u00e9s solides qui prennent en charge les besoins de l\u2019architecture de microservices, des syst\u00e8mes distribu\u00e9s et des applications d\u2019entreprise \u00e0 grande \u00e9chelle, ce dont on parle moins, c\u2019est que Go a \u00e9galement \u00e9t\u00e9 con\u00e7u en gardant \u00e0 l&apos;esprit le d\u00e9veloppement Web d\u00e8s le d\u00e9part. D&apos;ailleurs, de nombreux d\u00e9veloppeurs de la communaut\u00e9 utilisent Go pour le d\u00e9veloppement full-stack et pour d\u00e9fendre de nouveaux modules et frameworks, qui font de Go un langage solide pour le Web.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\u00c9tudions quelques-unes des fa\u00e7ons dont Golang et le monde en expansion des <a href=\"https:\/\/jfrog.com\/blog\/go-modules-are-awesome-but-there-is-one-tiny-problem\/\">modules Go<\/a> dirig\u00e9s par la communaut\u00e9 prennent en charge l\u2019\u00e9change de donn\u00e9es dans les applications Web. Je vais \u00e9galement montrer comment identifier certains modules de qualit\u00e9 via GoCenter, le proxy de module Go gratuit pour la communaut\u00e9 de d\u00e9veloppement, et j&apos;examinerai en profondeur l\u2019un de mes pr\u00e9f\u00e9r\u00e9s.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Golang Aime les Donn\u00e9es sur le Web<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Go int\u00e8gre des packages Web sophistiqu\u00e9s dans sa biblioth\u00e8que de base. Avec la version r\u00e9cente Golang\u00a01.15, cette <\/span><a href=\"https:\/\/golang.org\/doc\/go1.15#library\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">biblioth\u00e8que de base a \u00e9t\u00e9 mise \u00e0 jour<\/span><\/a><span style=\"font-weight: 400\"> avec des am\u00e9liorations apport\u00e9es \u00e0 <\/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\"> et <\/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\"> qui renforcent la capacit\u00e9 de Go \u00e0 travailler avec des donn\u00e9es Web. Ces modifications ajoutent des limitations qui r\u00e9duisent le risque d&apos;avoir de grandes quantit\u00e9s de services de donn\u00e9es utilisant trop de m\u00e9moire stack, et d\u00e9finissent une dur\u00e9e d\u2019inactivit\u00e9 pour les connexions de base de donn\u00e9es.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Cr\u00e9ation de Serveur Web<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Le package <code>net\/http<\/code> de Go fait partie de la biblioth\u00e8que standard et est con\u00e7u pour transporter du code HTML du serveur au client. Il utilise pour cela une interface <code>http.Handler<\/code> qui cr\u00e9e son propre serveur Web. Cette biblioth\u00e8que facilite le d\u00e9veloppement d\u2019API RESTful, et avec les structures Go, il est possible de mapper les applications Big Data \u00e0 un certain nombre de bases de donn\u00e9es et de types de donn\u00e9es diff\u00e9rents.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Le lancement du service Web implique l\u2019importation du package net\/http et l\u2019\u00e9criture de deux fonctions.<\/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;Welcome to the HomePage!&quot;)\r\n    fmt.Println(&quot;Endpoint 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\">Ce fichier tr\u00e8s simple permet de configurer un serveur Web fonctionnel. Bien s\u00fbr, ce serveur n\u2019envoie pas, ne stocke pas et ne r\u00e9cup\u00e8re pas r\u00e9ellement d\u2019informations du Web vers une base de donn\u00e9es. Pour int\u00e9grer cette fonctionnalit\u00e9, nous avons cr\u00e9\u00e9 une application CRUD de base qui peut <\/span><span style=\"font-weight: 400\">CR\u00c9ER<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">LIRE<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">METTRE \u00c0 JOUR<\/span><span style=\"font-weight: 400\"> et <\/span><span style=\"font-weight: 400\">SUPPRIMER <\/span><span style=\"font-weight: 400\">des informations dans votre API.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Pour en savoir plus sur l\u2019utilisation de ce package pour cr\u00e9er des API RESTful, consultez l&apos;<\/span><a href=\"https:\/\/tutorialedge.net\/golang\/creating-restful-api-with-golang\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">excellent tutoriel d\u2019Elliot 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\">L&apos;utilisation de la biblioth\u00e8que principale de Go est une fa\u00e7on d\u2019envoyer et de recevoir des informations <\/span><a href=\"https:\/\/golang.org\/pkg\/encoding\/json\/\"><code>encoding\/json<\/code><\/a><span style=\"font-weight: 400\">. Cette biblioth\u00e8que facilite la lecture\/\u00e9criture de donn\u00e9es \u00e0 partir de JSON dans vos applications Go. JSON ou Javascript Object Notation a \u00e9t\u00e9 con\u00e7u pour encoder et d\u00e9coder des donn\u00e9es sur le Web et est beaucoup plus adapt\u00e9 au Web que le XML direct. Gr\u00e2ce aux paires cl\u00e9:valeur, JSON ressemble davantage \u00e0 du texte brut. Son format de donn\u00e9es lisible peut \u00eatre utilis\u00e9 lors de la cr\u00e9ation de vos applications full-stack, de mani\u00e8re \u00e0 \u00e9viter trop de long code SQL. Bien que JSON facilite l\u2019envoi de donn\u00e9es, il a toujours besoin d\u2019un moyen de communiquer avec une base de donn\u00e9es comme PostgreSQL.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400\">ORM Golang<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Heureusement, la communaut\u00e9 Go a cr\u00e9\u00e9 un certain nombre de biblioth\u00e8ques ORM (Object Relational Mapping) pour permettre aux d\u00e9veloppeurs Go d\u2019utiliser la syntaxe et l\u2019encodage de paires cl\u00e9:valeur JSON pour mapper directement vers une base de donn\u00e9es SQL comme PostgreSQL. Les ORM permettent aux d\u00e9veloppeurs d\u2019utiliser leur paradigme de programmation natif pour mapper des donn\u00e9es vers SQL.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Un ORM transforme les informations de votre base de donn\u00e9es en objets Golang et vice versa. Lorsque vous travaillez avec un ORM, au lieu d\u2019\u00e9crire des requ\u00eates SQL directement dans votre application, vous pouvez mapper vos donn\u00e9es beaucoup mieux \u00e0 l\u2019aide d&apos;une structure Golang telle que celle-ci\u00a0:<\/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 database\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\">Les ORM ne font pas l&apos;unanimit\u00e9, car ils cr\u00e9ent un niveau d\u2019abstraction \u00e0 partir des donn\u00e9es r\u00e9elles stock\u00e9es dans la base de donn\u00e9es. Selon la biblioth\u00e8que que vous utilisez, un autre inconv\u00e9nient est que, bien que le SQL soit bien \u00e9tabli, les infrastructures ORM peuvent appara\u00eetre et dispara\u00eetre du jour au lendemain. Mais, dans l\u2019ensemble, j\u2019ai constat\u00e9 que les ORM facilitent grandement le suivi des donn\u00e9es d\u2019applications Web dans Go et r\u00e9duisent la quantit\u00e9 de codage fastidieux en rempla\u00e7ant de nombreuses commandes SQL, \u00e0 l\u2019int\u00e9rieur de mon application, par quelque chose de plus facile \u00e0 utiliser.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Un certain nombre d\u2019ORM Go sont pris en charge et promus dans la communaut\u00e9, tous disponibles dans GoCenter\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><b>XORM<\/b><b>\u00a0: <\/b><span style=\"font-weight: 400\">Un cadre ORM simple et puissant pour Go<\/span><\/li>\n<li style=\"font-weight: 400\"><b>Go-PG<\/b><b>\u00a0: <\/b><span style=\"font-weight: 400\">Un client postgreSQL et ORM pour Golang<\/span><\/li>\n<li style=\"font-weight: 400\"><b>SQLBOILDER<\/b><b>\u00a0: <\/b><span style=\"font-weight: 400\">Un outil pour g\u00e9n\u00e9rer un Go ORM adapt\u00e9 \u00e0 votre sch\u00e9ma de base de donn\u00e9es<\/span><\/li>\n<li style=\"font-weight: 400\"><b>SQLX\u00a0: <span style=\"font-weight: 400\">Ce n&apos;est pas un ORM, mais un autre excellent outil pour SQL dans Go<\/span><\/b><\/li>\n<\/ul>\n<h2>GORM\u00a0: Un \u00ab\u00a0Top Gopher\u00a0\u00bb<\/h2>\n<p><b>GORM<\/b><span style=\"font-weight: 400\"> est un ORM convivial pour les d\u00e9veloppeurs cr\u00e9\u00e9 par <\/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\"> et comptabilisant plus de 19\u00a0000\u00a0\u00e9toiles sur GitHub. Il dispose d\u2019un excellent support communautaire et <\/span><a href=\"https:\/\/gorm.io\/docs\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">d\u2019une documentation facile \u00e0 suivre<\/span><\/a><span style=\"font-weight: 400\">. GORM fournit des op\u00e9rations CRUD et peut \u00e9galement \u00eatre utilis\u00e9 pour la migration initiale et la cr\u00e9ation du sch\u00e9ma de base de donn\u00e9es. Les autres points forts de GORM sont sa facilit\u00e9 d&apos;extension avec la prise en charge de plugin natif, sa fiabilit\u00e9 aux tests, et le support d\u2019associations 1-1 et 1-N. Gorm prend \u00e9galement en charge <\/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\">et mssql.<\/span><\/p>\n<div class=\"container\">\n<div class=\"row row-cols-1 row-cols-md-2\">\n<div class=\"col-sm\">Ces fonctionnalit\u00e9s sont l&apos;un des principaux arguments pour lesquels le module GORM a re\u00e7u le titre de \u00ab\u00a0Top Gopher\u00a0\u00bb dans GoCenter. Si vous consultez les m\u00e9tadonn\u00e9es compl\u00e8tes de GoCenter sur le module GORM, vous comprendrez pourquoi\u00a0:<\/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\">Le fichier <\/span><b>ReadMe <\/b><span style=\"font-weight: 400\">du module vous dirige vers une documentation compl\u00e8te. Nous pouvons en savoir plus sur le code du module via <\/span><a href=\"https:\/\/jfrog.com\/blog\/godoc-in-gocenter\/\"><b>l\u2019onglet GoDoc<\/b><span style=\"font-weight: 400\">, <\/span><\/a><span style=\"font-weight: 400\"><span style=\"font-weight: 400\">qui affiche la documentation g\u00e9n\u00e9r\u00e9e automatiquement sur les fonctions et plus encore.<\/span><\/span><\/li>\n<li style=\"font-weight: 400\">Les onglets <a href=\"https:\/\/jfrog.com\/blog\/gocenter-connects-go-modules-authors-with-consumers\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b>Used By<\/b> et <b>Metrics<\/b> de GoCenter<\/a> montrent que ce module est tr\u00e8s appr\u00e9ci\u00e9 et fiable, avec de nombreux t\u00e9l\u00e9chargements, forks, contributeurs et utilisations par d\u2019autres modules Go.<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\">L&apos;<\/span><a href=\"https:\/\/jfrog.com\/blog\/gocenter-reveals-go-module-vulnerabilities-with-xray\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b>onglet Security<\/b><\/a><span style=\"font-weight: 400\"> de GoCenter r\u00e9v\u00e8le \u00e9galement que la version actuelle de ce module et ses d\u00e9pendances ne pr\u00e9sentent pas de vuln\u00e9rabilit\u00e9 NVD connue, comme le confirme une <\/span><a href=\"https:\/\/jfrog.com\/xray-gocenter\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">analyse approfondie JFrog Xray<\/span><\/a><span style=\"font-weight: 400\">.<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\">Utilisation de GORM<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Imaginons que vous souhaitiez cr\u00e9er une API (ou plus tard, une application Web) qui demande aux utilisateurs de vous fournir leur nom, leur adresse \u00e9lectronique et un court message. Avec GORM, une suite d\u2019\u00e9tapes assez simple permettrait de mapper cela \u00e0 une base de donn\u00e9es. Les \u00e9tapes\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Configurer votre base de donn\u00e9es\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Mapper une structure d\u2019utilisateur<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Se connecter \u00e0 la<\/span><b> base de donn\u00e9es<\/b><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Effectuer la migration initiale vers la <\/span><b>db<\/b><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Configurer vos fonctions<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ex\u00e9cuter l\u2019application<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400\">Proc\u00e9dure pas \u00e0 pas GORM<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Imaginons que mon agent immobilier \u00e0 temps partiel (ou peut-\u00eatre ma s\u0153ur) ait besoin d\u2019une application Web qui peut recueillir et stocker des demandes de renseignements sur les propri\u00e9t\u00e9s qu\u2019elle g\u00e8re dans notre ville natale. La premi\u00e8re chose que je devrais faire serait de d\u00e9velopper une base de donn\u00e9es qui peut stocker des informations utilisateur et une API Web qui peut collecter ces informations via un formulaire de contact, puis acc\u00e9der ult\u00e9rieurement \u00e0 ces informations utilisateur afin qu\u2019elles puissent \u00eatre lues dans un navigateur. Nous allons passer en revue quelques-unes des principales \u00e9tapes que j\u2019ai suivies pour d\u00e9velopper ce type d\u2019application.<\/span><\/p>\n<h4>Importation de mes modules<\/h4>\n<p><span style=\"font-weight: 400\">Tout d\u2019abord, dans notre fichier <\/span><b>main.go<\/b><span style=\"font-weight: 400\">, nous pouvons importer nos modules avec les commandes suivantes\u00a0:<\/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>Variable de Connexion de Base de Donn\u00e9es<\/h4>\n<p><span style=\"font-weight: 400\">Cr\u00e9ez une variable simple pour la base de donn\u00e9es GORM\u00a0:<\/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>Structure Utilisateur<\/h4>\n<p><span style=\"font-weight: 400\">Nous allons cr\u00e9er notre d\u00e9finition de mod\u00e8le avec une structure Golang qui mappe le nom de l\u2019utilisateur, son adresse \u00e9lectronique et son message.\u00a0<\/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>Migration Initiale pour la Base de Donn\u00e9es<\/h4>\n<p><span style=\"font-weight: 400\">J\u2019ai nomm\u00e9 ma base de donn\u00e9es sqlite <\/span><b>project.db <\/b><span style=\"font-weight: 400\">et je peux utiliser la fonctionnalit\u00e9 AutoMigrate de GORM avec une fonction qui ressemble \u00e0 ceci\u00a0:<\/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;Failed to connect to database&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>Fonction de Gestionnaire d\u2019Affichage<\/h4>\n<p><span style=\"font-weight: 400\">Cela nous permettra de voir les donn\u00e9es de l\u2019API dans le navigateur\u00a0:<\/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;Successfully connected to the database...&quot;)\r\n   _, err := writer.Write(placeholder)\r\n   check(err)\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Fonctionnalit\u00e9 de l\u2019API<\/h4>\n<p><span style=\"font-weight: 400\">L\u2019API utilise quatre fonctions principales qui nous permettront de trouver\/obtenir des utilisateurs, d\u2019en ajouter, d&apos;en supprimer et de mettre \u00e0 jour les informations utilisateur dans la base de donn\u00e9es. Ces fonctions peuvent \u00eatre d\u00e9crites comme suit\u00a0:<\/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\">Par exemple, cette fonction se connectera \u00e0 la base de donn\u00e9es et affichera toutes les entr\u00e9es pour les utilisateurs\u00a0:<\/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;project.db&quot;)\r\n   if err != nil {\r\n       panic(&quot;failed to connect database&quot;)\r\n   }\r\n   defer db.Close()\r\n \r\n   var users []User\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>Routeur<\/h4>\n<p><span style=\"font-weight: 400\">Une fois que chaque fonction ci-dessus est cr\u00e9\u00e9e, la fonction pour g\u00e9rer le routage ressemblerait \u00e0 ceci\u00a0:<\/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>Fonction Principale<\/h4>\n<p><span style=\"font-weight: 400\">Enfin, vous pouvez ex\u00e9cuter l\u2019application en pla\u00e7ant les \u00e9l\u00e9ments suivants dans votre fonction principale\u00a0:<\/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 Project Started&quot;)\r\n   initialMigration()\r\n   handleRequests()\r\n}<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Ex\u00e9cutez l&apos;Application<\/h4>\n<p><span style=\"font-weight: 400\">Puis avec <code>go run main.go<\/code>, <span style=\"font-weight: 400\">nous verrons la r\u00e9ponse\u00a0:<\/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 Project Started<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Et lorsque je publie (POST) quelques requ\u00eates sur mon API, je peux obtenir (GET) cette demande et voir les donn\u00e9es dans le navigateur\u00a0:<\/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\">Approfondissez vos Connaissances<\/span><\/h3>\n<p><span style=\"font-weight: 400\">En tant que d\u00e9veloppeur Go utilisant GORM pour la premi\u00e8re fois, je trouve qu&apos;il a fortement facilit\u00e9 la migration et le mappage des donn\u00e9es vers une base de donn\u00e9es sqlite. Le code ci-dessus est un simple instantan\u00e9 pour vous permettre de d\u00e9marrer.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Pour plus d\u2019informations sur <\/span><span style=\"font-weight: 400\">l\u2019utilisation de GORM pour cr\u00e9er des API, consultez <\/span><a href=\"https:\/\/tutorialedge.net\/golang\/golang-orm-tutorial\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">cet excellent tutoriel complet avec vid\u00e9o r\u00e9alis\u00e9 Elliot Forbes<\/span><\/a><span style=\"font-weight: 400\">. <\/span><span style=\"font-weight: 400\">\u00a0N\u2019oubliez pas de <\/span><a href=\"https:\/\/twitter.com\/Elliot_f\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">remercier Elliot sur Twitter<\/span><\/a><span style=\"font-weight: 400\"> pour son merveilleux tutoriel qui couvre tous les aspects des API Golang.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">GORM\u00a0v2 est \u00e9galement publi\u00e9 d\u00e9sormais et est utilis\u00e9 pour les tests publics.\u00a0<\/span><\/p>\n<h2>Conclusion<\/h2>\n<p><span style=\"font-weight: 400\">Les points forts de Go dans le d\u00e9veloppement d\u2019API Web incluent sa vitesse et son \u00e9volutivit\u00e9\u00a0; un point assez important \u00e0 mesure que l\u2019\u00e8re du Machine Learning devient courante. Go a \u00e9t\u00e9 construit \u00e0 l\u2019\u00e8re des processeurs multic\u0153urs et utilise des <\/span><i><span style=\"font-weight: 400\">goroutines<\/span><\/i><span style=\"font-weight: 400\"> pour cr\u00e9er des threads sur des t\u00e2ches simultan\u00e9ment via plusieurs canaux sur plusieurs processeurs. Cela signifie qu\u2019il peut g\u00e9rer l\u2019\u00e9chelle et l\u2019infrastructure n\u00e9cessaires pour les applications de donn\u00e9es volumineuses, et qu&apos;il peut g\u00e9rer des millions de requ\u00eates HTTP simultan\u00e9ment. Il est \u00e9galement typ\u00e9 statiquement et sa syntaxe stricte rend le d\u00e9bogage beaucoup plus facile, tout en le prot\u00e9geant contre les erreurs que des langages moins stricts, avec d\u2019\u00e9normes biblioth\u00e8ques comme Javascript, pourraient introduire. C\u2019est pourquoi des entreprises, d\u2019Uber \u00e0 DropBox, utilisent Go comme langage de choix pour les API et pour faire \u00e9voluer leurs applications Web.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Si vous souhaitez utiliser les capacit\u00e9s de l\u2019API de Go, la cr\u00e9ation de votre propre API Web \u00e0 l\u2019aide d\u2019ORM tels que GORM est un excellent point de d\u00e9part.<\/span><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>MISE \u00c0 JOUR\u00a0: \u00c0 compter du 1er\u00a0mai\u00a02021, le d\u00e9p\u00f4t central GoCenter a \u00e9t\u00e9 mis hors service et toutes ses fonctionnalit\u00e9s seront obsol\u00e8tes. Pour en savoir plus sur la mise hors service des centres, lisez l&apos;article de blog sur la d\u00e9pr\u00e9ciation &nbsp; Chaque mois, GoCenter d\u00e9cerne aux modules les plus performants un badge Gopher qui reconna\u00eet &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":[9960],"tags":[9398,9399],"class_list":["post-79891","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gestion-des-artefacts","tag-modules-go","tag-gocenter-fr"],"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>Utilisation du module GORM Go pour les API Web dans Golang | JFrog\u00a0GoCenter<\/title>\n<meta name=\"description\" content=\"D\u00e9couvrez les biblioth\u00e8ques ORM (Object Relational Mapping) pour l\u2019\u00e9change de donn\u00e9es entre SQL et Golang et comment utiliser le module GORM Go pour les op\u00e9rations CRUD dans les API Web.\" \/>\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\/fr\/wp-json\/wp\/v2\/posts\/79891\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Utilisation du module GORM Go pour les API Web\" \/>\n<meta property=\"og:description\" content=\"pleins feux sur quelques-uns des laur\u00e9ats Top Gopher dans JFrog GoCenter\u00a0! Tout d\u2019abord, comment cr\u00e9er des API Web dans Golang \u00e0 l\u2019aide de GORM\u00a0?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jfrog.com\/fr\/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-08-08T13:53:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-08T13:55:01+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=\"Principaux modules Go\u00a0: API Web Golang avec GORM\" \/>\n<meta name=\"twitter:description\" content=\"Pleins feux sur quelques-uns des laur\u00e9ats Top Gopher dans JFrog GoCenter\u00a0! Tout d\u2019abord, comment cr\u00e9er des API Web dans Golang \u00e0 l\u2019aide de GORM\u00a0?\" \/>\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=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/\"},\"author\":{\"name\":\"giannit\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\"},\"headline\":\"Principaux modules Go\u00a0: API Web Golang avec GORM\",\"datePublished\":\"2021-08-08T13:53:27+00:00\",\"dateModified\":\"2021-08-08T13:55:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/\"},\"wordCount\":2075,\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/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\":[\"Modules Go\",\"gocenter\"],\"articleSection\":[\"Gestion des Artefacts\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/\",\"url\":\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/\",\"name\":\"Utilisation du module GORM Go pour les API Web dans Golang | JFrog\u00a0GoCenter\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/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-08-08T13:53:27+00:00\",\"dateModified\":\"2021-08-08T13:55:01+00:00\",\"description\":\"D\u00e9couvrez les biblioth\u00e8ques ORM (Object Relational Mapping) pour l\u2019\u00e9change de donn\u00e9es entre SQL et Golang et comment utiliser le module GORM Go pour les op\u00e9rations CRUD dans les API Web.\",\"breadcrumb\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/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\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jfrog.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Principaux modules Go\u00a0: API Web Golang avec GORM\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jfrog.com\/fr\/#website\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"name\":\"JFrog\",\"description\":\"Deliver Trusted Software Releases at Speed and Scale\",\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jfrog.com\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\",\"name\":\"JFrog\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/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\/fr\/#\/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\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\",\"name\":\"giannit\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/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":"Utilisation du module GORM Go pour les API Web dans Golang | JFrog\u00a0GoCenter","description":"D\u00e9couvrez les biblioth\u00e8ques ORM (Object Relational Mapping) pour l\u2019\u00e9change de donn\u00e9es entre SQL et Golang et comment utiliser le module GORM Go pour les op\u00e9rations CRUD dans les API Web.","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\/fr\/wp-json\/wp\/v2\/posts\/79891","og_locale":"fr_FR","og_type":"article","og_title":"Utilisation du module GORM Go pour les API Web","og_description":"pleins feux sur quelques-uns des laur\u00e9ats Top Gopher dans JFrog GoCenter\u00a0! Tout d\u2019abord, comment cr\u00e9er des API Web dans Golang \u00e0 l\u2019aide de GORM\u00a0?","og_url":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/","og_site_name":"JFrog","article_publisher":"https:\/\/www.facebook.com\/artifrog","article_published_time":"2021-08-08T13:53:27+00:00","article_modified_time":"2021-08-08T13:55:01+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":"Principaux modules Go\u00a0: API Web Golang avec GORM","twitter_description":"Pleins feux sur quelques-uns des laur\u00e9ats Top Gopher dans JFrog GoCenter\u00a0! Tout d\u2019abord, comment cr\u00e9er des API Web dans Golang \u00e0 l\u2019aide de GORM\u00a0?","twitter_creator":"@jfrog","twitter_site":"@jfrog","twitter_misc":{"Written by":"giannit","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#article","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/"},"author":{"name":"giannit","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af"},"headline":"Principaux modules Go\u00a0: API Web Golang avec GORM","datePublished":"2021-08-08T13:53:27+00:00","dateModified":"2021-08-08T13:55:01+00:00","mainEntityOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/"},"wordCount":2075,"publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"image":{"@id":"https:\/\/jfrog.com\/fr\/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":["Modules Go","gocenter"],"articleSection":["Gestion des Artefacts"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/","url":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/","name":"Utilisation du module GORM Go pour les API Web dans Golang | JFrog\u00a0GoCenter","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#primaryimage"},"image":{"@id":"https:\/\/jfrog.com\/fr\/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-08-08T13:53:27+00:00","dateModified":"2021-08-08T13:55:01+00:00","description":"D\u00e9couvrez les biblioth\u00e8ques ORM (Object Relational Mapping) pour l\u2019\u00e9change de donn\u00e9es entre SQL et Golang et comment utiliser le module GORM Go pour les op\u00e9rations CRUD dans les API Web.","breadcrumb":{"@id":"https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jfrog.com\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/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\/fr\/blog\/top-go-modules-golang-web-apis-with-gorm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jfrog.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Principaux modules Go\u00a0: API Web Golang avec GORM"}]},{"@type":"WebSite","@id":"https:\/\/jfrog.com\/fr\/#website","url":"https:\/\/jfrog.com\/fr\/","name":"JFrog","description":"Deliver Trusted Software Releases at Speed and Scale","publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jfrog.com\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/jfrog.com\/fr\/#organization","name":"JFrog","url":"https:\/\/jfrog.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/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\/fr\/#\/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\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af","name":"giannit","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/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\/fr\/wp-json\/wp\/v2\/posts\/79891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/users\/140"}],"replies":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/comments?post=79891"}],"version-history":[{"count":2,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/79891\/revisions"}],"predecessor-version":[{"id":79893,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/79891\/revisions\/79893"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media\/64362"}],"wp:attachment":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media?parent=79891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/categories?post=79891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/tags?post=79891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}