go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口

hello world

常规版

新建 demo1.go 并输入以下代码,进入命令行,go run demo1.go ,就可以看到命令行输出 hello world

package main

import "fmt"

func main() {
fmt.Println("hello word")
}

网络版

使用 go 标准库 http 可以很容易建立一个 http 服务,保存以下代码为 demo2.go

package main

import (
"fmt"
"net/http"
) func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
_, _ = fmt.Fprintf(w, "%s hello world", r.Method)
})
_ = http.ListenAndServe(":8080", nil)
}

使用 go run 命令,打开浏览器 http://127.0.0.1:8080/ 查看效果。

通过上面,发现 go 程序代码的结构为:包申明->导入包->函数。其中 main 包说明该程序是一个独立的程序,main 函数是入口函数。

gin

地址:https://github.com/gin-gonic/gin

gin 是一个基于 http 库的轻量级 go 框架,只要几行代码就可以起一个 api 服务,使用前需要下载这个库,

demo

$ go get github.com/gin-gonic/gin 使用 go get 来下载库

package main

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

func main() {
r := gin.Default() // 返回一个默认的gin实例
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
_ = r.Run() // 默认在 0.0.0.0:8080 上监听并服务
}

保存上面代码在 api.go 中,运行 go run api.go,浏览器或 postman 打开 http://127.0.0.1:8080/ping 查看效果

gorm

文档:https://jasperxu.github.io/gorm-zh/

gorm 是一个类似于 laravel 中的 Eloquent ORM,支持mysql,sqlite等多种数据库,使用前请下载

$ go get github.com/jinzhu/gorm
$ go get github.com/mattn/go-sqlite3 //sqlite驱动

curd api

利用以上包,编写一个对用户资料实现增删改查的接口

新增用户接口

package main

import (
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"log"
) var db *gorm.DB
var err error type User struct {
ID uint `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
} func main() {
db, err = gorm.Open("sqlite3", "./api.db")
//使用mysql, gorm.Open(“mysql”, “user:pwd@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local”)
if err != nil {
log.Fatal("db connect error")
}
defer db.Close() //延时调用函数
db.AutoMigrate(&User{}) r := gin.Default()
r.GET("/users", index) //获取所有用户
r.GET("/users/:id", show) //根据id获取用户
r.POST("/users", store) //保存新用户
r.PUT("/users/:id", update) //根据id更新用户
r.DELETE("/users/:id", destroy) //根据id删除用户
_ = r.Run()
} func index(c *gin.Context) {} func show(c *gin.Context) {} func store(c *gin.Context) {
var user User
_ = c.BindJSON(&user) //绑定一个请求主体到一个类型
db.Create(&user)
c.JSON(200, user)
} func update(c *gin.Context) {} func destroy(c *gin.Context) {}

postman 测试效果

获取所有用户接口

func index(c *gin.Context) {
var users []User
db.Find(&users)
c.JSON(200, users)
}

postman 测试效果

获取指定id用户接口

func show(c *gin.Context) {
id := c.Params.ByName("id")
var user User
db.First(&user, id)
if user.ID == 0 {
c.JSON(404, gin.H{"message": "user not found"})
return
}
c.JSON(200, user)
}

postman 测试效果

更新和删除接口

func update(c *gin.Context) {
id := c.Params.ByName("id")
var user User
db.First(&user, id)
if user.ID == 0 {
c.JSON(404, gin.H{"message": "user not found"})
return
} else {
_ = c.BindJSON(&user)
db.Save(&user)
c.JSON(200, user)
}
} func destroy(c *gin.Context) {
id := c.Params.ByName("id")
var user User
db.First(&user, id)
if user.ID == 0 {
c.JSON(404, gin.H{"message": "user not found"})
return
} else {
_ = c.BindJSON(&user)
db.Delete(&user)
c.JSON(200, gin.H{"message": "delete success"})
}
}

End

参考:https://medium.com/@cgrant/developing-a-simple-crud-api-with-go-gin-and-gorm-df87d98e6ed1

使用go, gin, gorm编写一个简单的curd的api接口的更多相关文章

  1. 编写一个简单的C++程序

    编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...

  2. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  3. 编写一个简单的Web Server

    编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...

  4. javascript编写一个简单的编译器(理解抽象语法树AST)

    javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...

  5. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  6. 用 Go 编写一个简单的 WebSocket 推送服务

    用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...

  7. 用C语言编写一个简单的词法分析程序

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...

  8. 用Python编写一个简单的Http Server

    用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...

  9. 手把手教你编写一个简单的PHP模块形态的后门

    看到Freebuf 小编发表的用这个隐藏于PHP模块中的rootkit,就能持久接管服务器文章,很感兴趣,苦无作者没留下PoC,自己研究一番,有了此文 0×00. 引言 PHP是一个非常流行的web ...

随机推荐

  1. Windows环境下springboot集成redis的安装与使用

    一,redis安装 首先我们需要下载Windows版本的redis压缩包地址如下: https://github.com/MicrosoftArchive/redis/releases 连接打开后如下 ...

  2. 排序算法——(2)Python实现十大常用排序算法

    上期为大家讲解了排序算法常见的几个概念: 相关性:排序时是否需要比较元素 稳定性:相同元素排序后是否可能打乱 时间空间复杂度:随着元素增加时间和空间随之变化的函数 如果有遗忘的同学可以看排序算法——( ...

  3. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  4. DDL(数据定义语言)

    1.Oracle中常见的数据类型分类:(A) 1.number(x,y) 数字类型,x表示最大长度,y表示精度对应java中除char外所有基本数据类型(byte.short.int.long.flo ...

  5. 驰骋工作流引擎 -Webservice接口说明文档

      关键词:工作流引擎接口说明  驰骋工作流接口参数详解 接口 LocalWSI /** * 待办 * @param userNo 用户编号 * @param sysNo 系统编号,为空时返回平台所有 ...

  6. redis cluster + sentinel详细过程和错误处理三主三备三哨兵

    redis cluster + sentinel详细过程和错误处理三主三备三哨兵1.基本架构192.168.70.215 7001 Master + sentinel 27001192.168.70. ...

  7. C语言中#undef作用

    #undef 作用:取消定义的宏 指令格式:#undef 标识符 1 #include <stdio.h> 2 3 #define MAX 5 4 5 int main() { 6 pri ...

  8. Intellij Idea 无法启动项目的配置坑

    1. run/debug configuration里面,tomcat的deployment点击添加不能自动创建war-explorded包: 方案:删除project libraries,重新mav ...

  9. 微信公众号支付提示mch_id参数格式错误

    背景: .Net MVC微信公众号支付功能 问题: 今天在做网站微信支付的时候,一直提示“微信公众号支付提示mch_id参数格式错误” ! 解决方法: 其实这个问题一般并不是说你配置有错,首先它提示你 ...

  10. Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译

    前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutor ...