ginapi服务器性能,如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一)

35665b584347

gin-gonic

介绍

Go 语言最近十分火热,但对于新手来说,想立马上手全新的语法和各种各样的框架还是有点难度的。即使是基础学习也很有挺有挑战性。

在这篇文章中,我想用最少的代码写出一个可用的 API 服务。这个 API 可以提供增删改查(CRUD)这些基本功能,对象关系映射 (ORM) 让数据库操作变得非常简单,不用 100 行代码,都可以搞定。让我们开始吧。

起步

Gin

既然是搭建 API 服务,就需要一个 Web 框架来处理路由并响应 HTTP 请求,Go 语言有很多各式各样的开源框架,本文我们选用了 Gin https://github.com/gin-gonic/gin。Gin 的特点是响应速度快,结构简单。

我们先来给 API 服务创建文件夹和 main.go 文件吧。

$ mkdir -p $GOPATH/src/simple-api

$ cd $GOPATH/src/simple-api

$ touch main.go

代码如下

package main

import "fmt"

func main() {

fmt.Println("Hello World")

}

我们先测试一下。

$ go run main.go

Hello World

非常好,现在让我们把 Gin 框架的代码加进去。

package main

import "github.com/gin-gonic/gin"

func main() {

r := gin.Default()

r.GET("/", func(c *gin.Context) {

c.String(200, "Hello World")

})

r.Run()

}

保存并运行。

$ go run main.go

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.

— using env: export GIN_MODE=release

— using code: gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET / → main.main.func1 (3 handlers)

[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default

[GIN-debug] Listening and serving HTTP on :8080

[GIN] 2016/12/02–14:57:52 | 200 | 33.798µs | ::1 | GET /

在浏览器中访问地址 http://localhost:8080

Hello World

成功了!!!

不过我们是在写 API,没人会返回字符串的,把返回值改成 JSON 格式吧。

package main

import "github.com/gin-gonic/gin"

func main() {

r := gin.Default()

r.GET("/", func(c *gin.Context) {

c.String(200, "Hello World")

c.JSON(200, gin.H{

"message": "Hello World",

})

})

r.Run()

}

保存文件,重新运行 API server,刷新浏览器,返回值变成了 JSON。

{“message”: “Hello World”}

用 GORM 把数据持久化

现在让我们考虑一下服务的持久化层,在这部分中,我们将把数据保存在一个本地 SQLite 文件中,在稍后的章节中,我们将改为 MySQL。

Gorm http://jinzhu.me/gorm/ 是一个 Go 语言实现的对象关系映射 (ORM) 框架。它简化了程序对数据库的操作,虽然我不是很赞同在大型的复杂系统中使用 ORM,但 ORM 在小项目中做做原型验证还是很不错的。Gorm 是 Go 的生态中很流行的工具,所以我们先从这里入手吧。

我们从头开始,先把之前的代码去掉,在浏览了 GORM 的主要功能后,再把 Gin 的代码加回来。先来个简单的例子:

package main

import (

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/sqlite"

)

func main() {

db, _ := gorm.Open("sqlite3", "./gorm.db")

defer db.Close()

}

执行程序后,在运行环境的文件系统里可以看到一个新文件 gorm.db。这就是 API 的数据库文件了。我们的 API 程序现在还没什么功能,让我们再加点代码吧。

package main

import (

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/sqlite"

)

type Person struct {

ID uint `json:"id"`

FirstName string `json:"firstname"`

LastName string `json:"lastname"`

}

func main() {

db, _ := gorm.Open("sqlite3", "./gorm.db")

defer db.Close()

p1 := Person{FirstName: "John", LastName: "Doe"}

p2 := Person{FirstName: "Jane", LastName: "Smith"}

fmt.Println(p1.FirstName)

fmt.Println(p2.LastName)

}

我们刚刚加了一个叫 Person 的结构体,然后建了几个 Person 类型的实例,并打印了里面的值。请注意结构体 Person 里的每个域的名字必须是大写字母开头的,这样 Go 语言才认为这是一个共有域。

package main

import (

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/sqlite"

)

type Person struct {

ID uint `json:"id"`

FirstName string `json:"firstname"`

LastName string `json:"lastname"`

}

func main() {

db, _ := gorm.Open("sqlite3", "./gorm.db")

defer db.Close()

db.AutoMigrate(&Person{})

p1 := Person{FirstName: "John", LastName: "Doe"}

p2 := Person{FirstName: "Jane", LastName: "Smith"}

db.Create(&p1)

var p3 Person

db.First(&p3)

fmt.Println(p1.FirstName)

fmt.Println(p2.LastName)

fmt.Println(p3.LastName)

}

到目前为止都很顺利,执行一下程序看看能得到什么结果。

$ go run main.go

John

Smith

Doe

写起来还是挺简单的吧,不用几行代码,我们就可以从数据库中存取信息了。Gorm 还有很多其他特性,接下来让我们再试试其中比较重要的功能,当然,要了解更多信息的话,请查看 Gorm 的文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

svn 无线服务器,远程svn服务器

远程svn服务器 内容精选换一换远程桌面链接Windows云服务器报错:连接被拒绝,因为没有授权此用户账户进行远程登录。Windows远程桌面相关权限配置异常。在运行窗口输入secpol.msc,打开组策略编辑器打开"本地策略 > 用户权限分配 > …

人类跌落梦境显示无法连接服务器,人类跌落梦境手游进不去闪退怎么办 人类跌落梦境无法进入解决方法...

人类跌落梦境进不去怎么办?不少玩家都出现了游戏无法进入的情况,下面小编就为大家带来人类跌落梦境无法进入解决方法,一起来看看吧。人类跌落梦境手游进不去闪退怎么办 人类跌落梦境无法进入解决方法方法一:核对开服时间1、人类跌落梦境于12…

jlabel字怎么变化_疫情在家烦躁不如学习怎样练好字吧

第一部分 练字的基本概念首先要明白,练字一定是主动的,而不能是盲目被动的,要了解所做的每一步的意义所在,才可能有效果,并为下一步打下基础。因此,在练字之前,必须首先搞清楚以下几个概念&…

科大奥锐实验报告霍尔效应_中科大929半导体物理专业课高分学长考研经验

推送会和你一起进步哒,记得右上角把我设为星标哦~考研经验3 August 2020中科大上岸学长考研途中最重要的是选择本人参加了2020中科大929半导体物理考研,分数137。关于半导体物理的历年考研信息(招生人数,大纲,分数线,教…

Win10系统java环境配置

下载JDK: 登录JDK官网:https://www.oracle.com/java/technol点击JDK Download向下翻找到适合自己电脑的版本,这里用win10举例,建议选exe文件,方便。 安装,一直点下一步即可,但是请记住jdk地址&…

app canvas渲染后图片黑色_H5 基于 canvas 实现电子签名并生成PDF文档

(给前端大全加星标,提升前端技能)转自:coyota666https://juejin.cn/post/6901273585428463624前言电子签名通俗来说就是通过技术手段实现在电子文档上加载电子形式的签名,其作用类似于纸质合同上的手写签名或加盖的公章。虽然电子签名多年来合…

前端为什么说github很重要_私域流量|为什么说私域流量很重要?

前面几篇文章我们分析了私域流量的概念,现在我们来分析一下私域流量的好处。为什么说私域流量很重要呢?首先,私域流量可以把营销成本降低,较快地获取用户反馈。之前在公域流量上进行的交易,都是你买我卖,你…

idea的jsp如何显示语法高亮_如何啃下Python学习中的三块硬骨头?

Python 根式字【51CTO.com快译】众所周知,作为一门开源的高级编程语言,Python的用途十分广泛。它可以被用于不同的应用场景中,包括:开发基于桌面和Web的应用程序,分析访问数据,开发后端网站和人工智能等。虽…

几种经典排序算法

文章转载自:指月小筑 原文链接:链接

Eclipse配置自动补齐键为alt+/

在顶栏找到window,选择下拉栏中的Preferences 在Preferences的搜索框输入keys,在右边的候选区域找到Content Assist,在Binding中输入Alt/ Apply and Close即可

公共界面_公共建筑东营市档案馆能耗计量分析系统

摘要:本文介绍东营市档案馆能耗管理系统,采用智能电力仪表采集配电现场的各种电参量,仪表就地组网后通过现场总线通讯并远传至后台,通过Acrel-5000型建筑能耗监测系统实现配电回路用电的监测分析。关键词:大型公共建筑…

IDEA、pycharm白嫖攻略

本方法仅适用于高校大学生 JetBrains系列下的idea、pycharm优秀的代码提示让人爱不释手,但是相比较eclipse,idea的巨大缺点就是:要收费。 我看到身边的许多同学为了使用idea、pycharm而到处搜索激活码或者破解软件 ,但是激活码还是…

com.alibaba.easyexcel导出指定的列_使用Python导入导出Excel表格

这篇文章的目的是讲解使用python导入导出Excel表格,目前还不涉及数据处理,主要实现为数据的展示。第一步,准备材料python3.8的安装包一个Excel表格第二步,安装软件python可以采用默认安装的方式,安装完之后把python和p…

2021-08-10 HDFS Web报错Couldn‘t preview the file.

在查看文件内容时&#xff0c;在红框位置出现报错“Couldn’t preview the file” 解决方法 第一步&#xff1a;修改hdfs-site.xml&#xff0c;添加配置信息 <property><name>dfs.webhdfs.enabled</name><value>true</value> </property&…

2021-08-10 maven配置阿里云仓库

方式一&#xff1a;全局配置 可以添加阿里云的镜像到maven的setting.xml配置中&#xff0c;这样就不需要每次在pom中&#xff0c;添加镜像仓库的配置&#xff0c;在mirrors节点下面添加子节点&#xff1a; <mirror><id>nexus-aliyun</id><mirrorOf>ce…

大橙子_橙子皮养花太棒了,酸性大,肥力足,比花肥强10倍

随着社会的不断发展&#xff0c;现在越来越多的人都喜欢在家里养花。在家里养花&#xff0c;可以装点居室&#xff0c;让我们家里更温馨漂亮&#xff0c;而且我们在养花的时候也能培养我们的兴趣&#xff0c;也有利于我们的身心健康。其实养花最主要的就是要补充充足的养分&…

adaptivitypara设置选0还是1_喝牛奶,选全脂还是低脂?家里人能不能喝同1种牛奶?...

年龄大的人&#xff0c;还记得&#xff0c;当年&#xff0c;牛奶是限量供应的&#xff0c;家里有婴儿或病人&#xff0c;才能得到1张卡&#xff0c;每天按时在街边等候&#xff0c;凭卡可以买到半斤掺水的牛奶。牛奶&#xff0c;被誉为接近完善的食品&#xff0c;其中所含的蛋白…

Centos8修改mysql密码

第一步&#xff1a;修改配置文件免密码登录mysql 进入文件&#xff1a;vi /etc/my.cnf文件末尾添加skip-grant-tables重启mysql 第二步: 免密码登录mysql 输入mysql登录&#xff1a; 进入数据库&#xff0c;输入&#xff1a; use mysql&#xff1b;查看root用户信息&#xf…

aop的实现原理_非Spring管理Bean如何添加AOP呢?

前几天有个朋友问了一个问题&#xff0c;觉得可以给大家分享一下。问题如下图归其根本这是个历史项目&#xff0c;里面有很多的类并没有交给spring管理&#xff0c;但现在需要统一添加日志。面对这样的问题&#xff0c;其实只要了解AOP的原理&#xff0c;就会有多种方法。AOP都…

什么从什么写短句_2020抖音文案短句:爱情、励志、伤感合集,值得收藏!

视频火不火&#xff0c;一半看文案&#xff01;想知道爆款视频的文案都是什么吗&#xff1f;想知道爆款文案的套路吗&#xff1f;今天&#xff0c;我就给大家整理了近期抖音爆款短视频的文案——爱情、励志、伤感短句&#xff0c;句句深入人心&#xff0c;赶紧来看看吧&#xf…