当前位置: 首页 > news >正文

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 apisimport ("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) {// 声明reqvar req HttpRequest// 声明res并初始化var res = HttpRespone{}// 获取api请求参数err := c.ShouldBindBodyWith(&req, binding.JSON)// 出现错误,则响应错误信息if err != nil {res.Status = 10res.Message = "读取请求参数错误"c.JSON(http.StatusOK, res)return}// 判断是否入参nameif req.Name == "" {res.Status = 20res.Message = "参数name为空"c.JSON(http.StatusOK, res)return}// 正常响应 hello nameres.Status = 0res.Message = "成功"res.Data = fmt.Sprintf("hello %v", req.Name)c.JSON(http.StatusOK, res)
}

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

package apisimport ("net/http""github.com/gin-gonic/gin"
)func StartHttp() {// 设置为发布模式(初始化路由之前设置)gin.SetMode(gin.ReleaseMode)// gin 默认中间件r := gin.Default()// 访问一个错误路由时,返回404r.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 mainimport "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

相关文章:

  • 个人博客教程(Typora官方免费版)
  • linux系统nginx主配置和日志简述
  • Linux实用命令
  • 嵌入式-stm32-基于HAL库的感应开关盖垃圾桶项目(开源)
  • 《动手学深度学习》学习笔记 第8章 循环神经网络
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)HttpRequest 提取请求行、解析请求行和优化 以及解析请求头并存储
  • 响应式编程Reactor API大全(中)
  • 数据结构之基本数据类型(Python)
  • Vue的v-for指令、事件处理、表单控制
  • 前端页面优化做的工作
  • 如何确定网络的深度和每层的节点(神经元)数目?
  • Unity3d 实现直播功能(无需sdk接入)
  • GPT实战系列-简单聊聊LangChain
  • 【适用于Jetson Orin Nano的录屏软件】
  • 构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的MySQL8.0.32的RPM包
  • C语言笔记(第一章:C语言编程)
  • Java应用性能调优
  • Linux gpio口使用方法
  • rc-form之最单纯情况
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 基于游标的分页接口实现
  • 解决iview多表头动态更改列元素发生的错误
  • 聊聊sentinel的DegradeSlot
  • 普通函数和构造函数的区别
  • 前端面试总结(at, md)
  • 前嗅ForeSpider教程:创建模板
  • 全栈开发——Linux
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 微服务框架lagom
  • Semaphore
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #define 用法
  • #考研#计算机文化知识1(局域网及网络互联)
  • (1)bark-ml
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (Java)【深基9.例1】选举学生会
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (规划)24届春招和25届暑假实习路线准备规划
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • *上位机的定义
  • ../depcomp: line 571: exec: g++: not found
  • .net CHARTING图表控件下载地址
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net快速开发框架源码分享
  • .so文件(linux系统)
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @Autowired标签与 @Resource标签 的区别
  • @JsonFormat与@DateTimeFormat注解的使用
  • @RequestBody详解:用于获取请求体中的Json格式参数