当前位置: 首页 > 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

相关文章:

Golang的API项目快速开始

开启一个简单的API服务。 golang的教程网上一大堆,官网也有非常详细的教程,这里不在赘述这些基础语法教程,我们意在快速进入项目开发阶段。 golang好用语法教程传送门: m.runoob.com/go/ 编写第一个API 前提:按照上一…...

机器学习_实战框架

文章目录 介绍机器学习的实战框架1.定义问题2.收集数据和预处理(1).收集数据(2).数据可视化(3).数据清洗(4).特征工程(5).构建特征集和标签集(6).拆分训练集、验证集和测试集。 3.选择算法并建立模型4.训练模型5.模型的评估和优化 介绍机器学习的实战框架 一个机器学习项目从开…...

Java8常用新特性

目录 简介 1.默认方法 2..Lambda表达式 3.Stream API 4.方法引用 5.Optional类 简介 Java 8是Java编程语言的一个重要版本,引入了许多令人兴奋和强大的新特性。这些特性使得Java程序更加现代化、灵活和高效。让我们一起来探索一些Java 8的常用新特性吧&#…...

Go语言中的Channel

1. 简介 Channel是Go语言中一种重要的并发原语,它允许goroutine之间安全地交换数据。Channel是一个类型化的队列,它可以存储一个特定类型的值。goroutine可以通过发送和接收操作来向channel中写入和读取数据。 2. Channel的类型 Channel的类型由其元素…...

Unity中URP下实现深度贴花

文章目录 前言一、场景设置二、实现思路1、通过深度图求出像素所在视图空间的Z值2、通过模型面片的求出像素在观察空间下的坐标值3、结合两者求出 深度图中像素的 XYZ值4、再将此坐标转换到模型的本地空间,把XY作为UV来进行纹理采样 三、URP下实现1、通过深度图求出…...

openssl3.2 - 官方demo学习 - cipher - aesccm.c

文章目录 openssl3.2 - 官方demo学习 - cipher - aesccm.c概述笔记END openssl3.2 - 官方demo学习 - cipher - aesccm.c 概述 aesccm.c 是 AES-192-CCM 的加解密应用例子, 用的EVP接口. 看到不仅仅要用到key, iv, data, 在此之前还要设置 nonce, tag, 认证数据. 为啥需要设置…...

点云从入门到精通技术详解100篇-基于多传感器融合的智能汽车 环境感知(下)

目录 基于激光雷达点云的目标检测 4.1 点云神经网络检测模型 4.2 点云预处理...

蓝桥杯单片机组备赛——蜂鸣器和继电器的基本控制

文章目录 一、蜂鸣器和继电器电路介绍二、题目与答案2.1 题目2.2 答案2.3 重点函数解析 一、蜂鸣器和继电器电路介绍 可以发现两个电路一端都接着VCC,所以我们只要给另一端接上低电平就可以让蜂鸣器和继电器进行工作。与操作LED类似,只不过换了一个74HC5…...

嵌入式linux 编译qt5(以v851s为例)

本文参考Blev大神的博客:Yuzuki Lizard V851S开发板 --移植 QT5.12.9教程(群友Blev提供) - Allwinner / 柚木PI-V851S - 嵌入式开发问答社区 (100ask.net) 一. 环境准备 1.下载qt5源码:Open Source Development | Open Source …...

uniapp 实战 -- app 的自动升级更新(含生成 app 发布页)

uniapp 提供了 App升级中心 uni-upgrade-center ,可以便捷实现app 的自动升级更新,具体编码和配置如下: 1. 用户端 – 引入升级中心插件 下载安装插件 uni-upgrade-center - App https://ext.dcloud.net.cn/plugin?id4542 pages.json 中添加…...

微服务http调用其他服务的方法

在对应需要调的服务配置文件加上路径 #审批方案微服务配置 server.port: 9004 upload.path: /alldev/u01/ schedule.cron.countDown: 0 0 8-18 * * ? statistics.syskey: ywsp schedule.countDown.isExecute: true post.url.updateStatus: http://10.3.2.222:8888/ecological…...

vagrant 用户名密码登录

正常登录后 sudo -i 切换到root权限 vim /etc/ssh/vim sshd_config 将PasswordAuthentication no设置 为yes 重启sshd.service服务 systemctl restart sshd.service...

强化学习应用(三):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…...

探索SQL性能优化之道:实用技巧与最佳实践

SQL性能优化可能是每个数据库管理员和开发者在日常工作中必不可少的一个环节。在大数据时代,为确保数据库系统的响应速度和稳定性,掌握一些实用的SQL优化技巧至关重要。 本文将带着开发人员走进SQL性能优化的世界,深入剖析实用技巧和最佳实践…...

Github项目推荐-Insomnia

项目地址 GitHub地址:GitHub - Kong/insomnia 官网:The Collaborative API Development Platform - Insomnia 项目简述 想必大家都知道PostMan吧。Insomnia可以说是PostMan的开源平替。页面ui很不错,功能强大,使用也比较方便。…...

python 语法

闭包 在函数嵌套的前提下&#xff0c;内部函数使用了外部函数的变量&#xff0c;并且外部函数返回了内部函数&#xff0c;我们把这个使用外部函数变量的内部函数称为闭包。 def outfunc(arg):def innerFunc(msg):print(f"<{msg}> {arg} <{msg}>")retu…...

Mac下载Navicat premium提示文件损坏的解决方案

引用&#xff1a;https://blog.csdn.net/weixin_44898291/article/details/120879508 sudo xattr -r -d com.apple.quarantine...

算法——贪心法(Greedy)

贪心法 把整个问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直到所有步骤结束&#xff1b;在每一步都不考虑对后续步骤的影响&#xff0c;在后续步骤中也不再回头改变前面的选择。不足之处&#xff1a; 贪心算法并不能保证获得全局最优解&…...

VmWare虚拟机的安装

VmWare官方最新版下载地址 vmware官方下载地址 安装流程 安装成功验证 安装完成之后&#xff0c;打开网络中心&#xff0c;一定要确认这里多出两个网络连接&#xff0c;才证明Vmware已经安装成功...

Vue.js轻量级框架:快速搭建可扩展的管理系统

一、前言 在项目实战开发中&#xff0c;尤其是大平台系统的搭建&#xff0c;针对不同业务场景&#xff0c;需要为用户多次编写用于录入、修改、展示操作的相应表单页面。一旦表单需求过多&#xff0c;对于开发人员来说&#xff0c;算是一种重复开发&#xff0c;甚至是繁杂的工作…...

KubeSphere Core 离线部署实战:从镜像搬运到私有仓库配置

1. 离线部署KubeSphere Core的核心挑战 在企业内网环境中部署KubeSphere Core时&#xff0c;最大的障碍就是如何解决容器镜像的获取问题。我去年给某金融机构做私有云改造时就遇到过这种情况——他们的生产环境完全隔离&#xff0c;所有服务器都无法直接访问公网。当时为了部署…...

PCB多层板设计:偶数层优势与奇数层解决方案

PCB多层板层数设计解析&#xff1a;偶数层优势与奇数层解决方案1. 多层PCB基础概念与现状PCB&#xff08;Printed Circuit Board&#xff09;根据层数可分为单面板、双面板和多层板。现代电子产品中&#xff0c;多层PCB的应用越来越广泛&#xff0c;其层数从4层到超过100层不等…...

产品经理的‘外挂’:用DeepSeek+R1和墨刀AI,5分钟搞定智能对话APP的需求文档与原型图

产品经理的‘外挂’&#xff1a;用DeepSeekR1和墨刀AI&#xff0c;5分钟搞定智能对话APP的需求文档与原型图 在快节奏的互联网产品开发中&#xff0c;产品经理常常面临时间紧、任务重的挑战。从市场调研到需求分析&#xff0c;从文档撰写到原型设计&#xff0c;每个环节都需要投…...

M5Stack舵机驱动库:PCA9685硬件PWM控制与多平台移植

1. 项目概述M5Hat-8Servos 是专为 M5Stack 生态设计的硬件驱动库&#xff0c;用于控制 M5Stack 官方推出的HAT-8SERVO扩展模块。该模块基于PCA9685 16通道12位PWM LED与伺服驱动芯片&#xff0c;通过 IC 总线与主控&#xff08;如 M5Stack Core2、M5Stamp C3、M5Paper 等&#…...

TypeScript——声明合并

声明合并1、接口声明合并2、枚举声明合并3、类声明合并4、命名空间声明合并4.1、命名空间与命名空间合并4.2、 命名空间与函数合并4.3、 命名空间与类合并4.4、 命名空间与枚举合并5、扩充模块声明6、扩充全局声明声明是编程语言中的基础结构&#xff0c;它描述了一个标识符…...

5分钟零基础掌握GPT-SoVITS:免费语音克隆终极指南

5分钟零基础掌握GPT-SoVITS&#xff1a;免费语音克隆终极指南 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 你是否曾梦想过用AI克隆自己或他人的声音&#xff1f;现在&#xff0c;GPT-SoVITS让这个梦想变得触手可及&…...

Java JFreeChart 折线图X轴标签优化:5分钟搞定密集数据展示问题

Java JFreeChart折线图X轴标签优化实战&#xff1a;解决密集数据展示难题 在数据可视化领域&#xff0c;折线图是最常用的图表类型之一。但当数据量激增时&#xff0c;X轴标签往往会因为空间不足而显示为省略号&#xff0c;严重影响图表可读性。本文将深入探讨如何通过定制化方…...

SmolVLA详细步骤:从start.sh启动到app.py调试的完整开发流程

SmolVLA详细步骤&#xff1a;从start.sh启动到app.py调试的完整开发流程 1. 项目概述与环境准备 SmolVLA是一个专为经济实惠的机器人技术设计的紧凑高效视觉-语言-动作模型。这个模型将视觉感知、语言理解和动作生成融合在一个轻量级架构中&#xff0c;让开发者能够快速构建智…...

这次咱们来拆解PFC二维浆岩直剪案例。这个案例有意思的地方在于它展示了颗粒材料与刚性墙体接触面的剪切行为,咱们边看代码边分析剪切曲线的门道

PFC案例9&#xff0c;浆-岩二维直剪&#xff0c;包含代码源文件、代码解释、曲线分析先看模型搭建的关键代码段&#xff1a; ;生成浆体颗粒 ball distribute ... ;创建上下剪切盒 wall generate id 1 vertices 0 0 1 0 1 1 0 1 wall generate id 2 vertices 0 0.2 1 0.2;设置…...

深大计算机考研复试全流程避坑指南:从机试环境、酒店选择到体检时机,这些细节别忽略

深大计算机考研复试全流程避坑指南&#xff1a;从机试环境到行程管理的实战策略 站在深大计算机楼前的那一刻&#xff0c;我才真正理解"细节决定成败"的含义——隔壁考场的同学因为酒店空调噪音彻夜未眠&#xff0c;机试时手指发抖敲错关键符号&#xff1b;而提前三个…...