Golang 使用 gin gorm 编写Restful API(一)

1. PostgreSQL的安装与使用

1.1 PostgreSQL安装

PostgreSQL的安装比较简单,之前没有使用过的小伙伴们请移步 PostgreSQL安装与使用教程

1.2 建库建表

创建数据库:

CREATE DATABASE test WITH OWNER = postgres;

创建student表:

CREATE TABLE IF NOT EXISTS public.student
(
    id bigint NOT NULL DEFAULT nextval('t_student_id_seq'::regclass),
    name text COLLATE pg_catalog."default" NOT NULL,
    age integer NOT NULL,
    CONSTRAINT t_student_pkey PRIMARY KEY (id)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.t_student
    OWNER to postgres;

注:这里可以省略表的创建,因为GORM会自动创建一个表名为实体同名复数形式的表

2. Go编写web server

2.1 添加相关依赖

gin 依赖安装:

go get -u github.com/gin-gonic/gin

GORM 库安装:

go get -u github.com/jinzhu/gorm

2.2 实体类

编写一个实体类student.go与数据的表对应

package entity

type Student struct {
	Id   int    `gorm:"primary_key" json:"id"`
	Name string `json:"name"`
	Age  int    `json:"age"`
}

2.3 数据库连接

通过GORM连接postgreSQL,进行数据库的CURD操作

建立连接:

db, err := gorm.Open("postgres", "host=101.35.54.34 port=5432 user=postgres dbname=test password=root sslmode=disable")

注:如果不添加 sslmode=disable,会产生如下error:

pq: SSL is not enabled on the server

新增数据:

func AddStudent(student *entity.Student) {
	db := ConnectDB()
	db.Create(student)
	defer db.Close()
}

查询数据:

func GetAll() (students []entity.Student) {
	db := ConnectDB()
	// 查询所有
	db.Find(&students)
	defer db.Close()
	return students
}

完成dao.go 代码如下:

package dao

import (
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/postgres"
	"gorm_demo/entity"
	"log"
)

func ConnectDB() (db *gorm.DB) {
	db, err := gorm.Open("postgres", "host=127.0.0.1 port=5432 user=postgres dbname=test password=root sslmode=disable")
	if err != nil {
		log.Println("connect postgreSQL fail")
		panic(err)
	}
	db.AutoMigrate(&entity.Student{})
	return db
}

func GetAll() (students []entity.Student) {
	db := ConnectDB()
	// 查询所有
	db.Find(&students)
	defer db.Close()
	return students
}

func AddStudent(student *entity.Student) {
	db := ConnectDB()
	db.Create(student)
	defer db.Close()
}

2.3 定义Restful API

通过gin定义api, app.go完成代码如下:

package app

import (
	"gorm_demo/dao"
	"gorm_demo/entity"
	"net/http"
)
import "github.com/gin-gonic/gin"

func App() {
	engine := gin.Default()
	api := engine.Group("/v1/test")
	{
		// 查询所有
		api.GET("/", func(context *gin.Context) {
			// 进行查询
			students := dao.GetAll()
			context.JSON(http.StatusOK, gin.H{
				"data": students,
			})
		})
		// 插入数据
		api.POST("/add", func(context *gin.Context) {
			student := entity.Student{Name: "阿盲", Age: 26}
			dao.AddStudent(&student)
			context.JSON(http.StatusOK, gin.H{
				"msg": "success",
			})
		})
	}
	// 监听 9090端口
	engine.Run(":9090")
}

2.4 程序入口

最后是我们程序入口main.go,直接调用APP()方法

package main

import "gorm_demo/app"

func main()  {
	app.App()
}

启动程序,监听9090端口

3. 接口测试

3.1 插入数据

GET http://localhost:9090/v1/test

使用Postman发起请求,由于具体的数据是在代码中写死插入,所以没有进行穿参,返回的结果与代码中的返回一致
在这里插入图片描述

3.2 查询数据

通过查询接口验证插入数据是否成功

POST http://localhost:9090/v1/test/add
在这里插入图片描述
查询出的与之前插入的数据一致,所以接口测试成功!

4. 项目结构图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值