Golang的API项目快速开始

开启一个简单的API服务。

golang的教程网上一大堆,官网也有非常详细的教程,这里不在赘述这些基础语法教程,我们意在快速进入项目开发阶段。

golang好用语法教程传送门: m.runoob.com/go/

编写第一个API

前提:按照上一篇文档初始化项目

1. 下载gin框架,一个非常好用的写API的框架,使用也很广泛

# 在项目文件下执行go命令下载gin依赖
go mod get github.com/gin-gonic/gin

2. 创建API文件夹:apis

3. 在apis创建第一个API文档:hello.go

4. 实现一个入参为name,返回为:hello name的api

package apis

import (
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
)

// API入参参数
type HttpRequest struct {
	Name string `json:"name"`
}

// API响应参数
type HttpRespone struct {
	Status  int    `json:"status"`
	Message string `json:"message"`
	Data    string `json:"data"`
}

/*
实现一个入参为name,响应为:hello name的api
这个例子中,异常信息通过status和message返回,api响应状态正常,如果需要响应400等异常状态,可以更换c.JSON(http.StatusOK, res)中的StatusOK
*/
func Hello(c *gin.Context) {
	// 声明req
	var req HttpRequest
	// 声明res并初始化
	var res = HttpRespone{}

	// 获取api请求参数
	err := c.ShouldBindBodyWith(&req, binding.JSON)
	// 出现错误,则响应错误信息
	if err != nil {
		res.Status = 10
		res.Message = "读取请求参数错误"
		c.JSON(http.StatusOK, res)
		return
	}
	// 判断是否入参name
	if req.Name == "" {
		res.Status = 20
		res.Message = "参数name为空"
		c.JSON(http.StatusOK, res)
		return
	}
	// 正常响应 hello name
	res.Status = 0
	res.Message = "成功"
	res.Data = fmt.Sprintf("hello %v", req.Name)
	c.JSON(http.StatusOK, res)
}

5. 在apis文件夹中创建apis.go,编写api路由注册和服务启动方法

package apis

import (
	"net/http"

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

func StartHttp() {
	// 设置为发布模式(初始化路由之前设置)
	gin.SetMode(gin.ReleaseMode)
	// gin 默认中间件
	r := gin.Default()

	// 访问一个错误路由时,返回404
	r.NoRoute(func(c *gin.Context) {
		c.JSON(http.StatusNotFound, gin.H{
			"status":  404,
			"message": "404, page not exists!",
		})
	})

	// 注册hello路由
	r.POST("/hello", Hello)

	// 启动API服务
	if err := r.Run(":8080"); err != nil {
		panic(err)
	}
}

6. 入口文件main.go引用apis模块

package main

import "prj_aiee/apis"

func main() {
	apis.StartHttp()
}

完整的项目文件构成如图:

7.  启动服务

# 项目文件夹下执行go命令
go run main.go

8. 调用api

# 执行curl命令调用API
curl -X POST "http://localhost:8080/hello" -H "content-type: application/json" -d "{\"name\": \"aiee\"}"

9. 响应如下: {"status":0,"message":"成功","data":"hello aiee"}

项目源码:GitHub - liyonge-cm/go_prj_aiee: go api 服务 demo

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 03:16:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 03:16:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 03:16:02       87 阅读
  4. Python语言-面向对象

    2024-01-13 03:16:02       96 阅读

热门阅读

  1. 【linux】利用echo命令实现不换行的倒计时

    2024-01-13 03:16:02       54 阅读
  2. [树莓派]给树莓派装pyinstaller环境

    2024-01-13 03:16:02       60 阅读
  3. Pandas实战100例 | 案例 9: 数据重塑 - `pivot` 和 `melt`

    2024-01-13 03:16:02       52 阅读
  4. SQL server 给列添加描述

    2024-01-13 03:16:02       69 阅读
  5. 图像处理中常用的距离

    2024-01-13 03:16:02       55 阅读
  6. c++对象拷贝与堆中的对象实例拷贝

    2024-01-13 03:16:02       60 阅读
  7. 77. 组合(回溯)

    2024-01-13 03:16:02       55 阅读
  8. go-zero 如何在任意地方获取yaml中的值

    2024-01-13 03:16:02       50 阅读
  9. Web前端篇——element-plus组件设置全局中文

    2024-01-13 03:16:02       54 阅读
  10. 100. 相同的树

    2024-01-13 03:16:02       51 阅读