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

go-zero开发入门-API服务开发示例

接口定义

  • 定义 API 接口文件

接口文件 add.api 的内容如下:

syntax = "v1"info (title:   "API 接口文件示例"desc:    "演示如何编写 API 接口文件"author:  "一见"date:    "2023年12月07日"version: "v1"
)type AddReq {A int `path:"a"`B int `path:"b"`
}type AddReply {Sum int `json:"sum"`        
}service Adder {@handler addget /add/:a/:b(AddReq) returns(AddReply)
}上述go-zero的api文件定义语法正确吗?
  • 编译 API 接口文件

在 add.api 文件所在目录下,使用 go-zero 的脚手架工具 goctl 编译 add.api 文件:

# goctl api go -api add.api -dir .
Done.

编译成功后的目录结构:

.
├── add.api
├── adder.go # 服务端 main 函数所在文件
├── etc
│   └── adder.yaml # 配置文件
└── internal├── config│   └── config.go # 和配置对应的数据结构├── handler # HTTP 部分代码│   ├── addhandler.go│   └── routes.go├── logic│   └── addlogic.go # 需要实现的业务逻辑代码├── svc│   └── servicecontext.go # 上下文└── types└── types.go # 对应 API 中定义的数据结构

在进一步之前,还需执行“go mod tidy”整理依赖。

目录 etc 下的配置文件 adder.yaml 定义的 API 网关服务的服务端口等:

# cat etc/adder.yaml 
Name: Adder
Host: 0.0.0.0
Port: 8888

如上所示,go-zero 脚手架 goctl 设置的监听端口为 8888 。

  • 编译生成可执行程序文件
go mod tidy
go build -o add_http_server adder.go
  • 启动服务:
# ./add_http_server 
Starting server at 0.0.0.0:8888...
  • 测试服务是否可用:
# curl -i "http://localhost:8888/add"
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-97de89193a15ff3704beeab6ab01cbc5-448ad910b934da13-00
Date: Thu, 07 Dec 2023 07:09:36 GMT
Content-Length: 4null

接口实现

go-zero 的脚手架 goctl 生成的是一个空服务,除了返回 null,啥也没干。在函数 Add 中增加实现:

# cat internal/logic/addlogic.go 
package logicimport ("context""api/internal/svc""api/internal/types""github.com/zeromicro/go-zero/core/logx"
)type AddLogic struct {logx.Loggerctx    context.ContextsvcCtx *svc.ServiceContext
}func NewAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddLogic {return &AddLogic{Logger: logx.WithContext(ctx),ctx:    ctx,svcCtx: svcCtx,}
}func (l *AddLogic) Add(req *types.AddReq) (resp *types.AddReply, err error) {// todo: add your logic here and delete this lines := req.A + req.B // 新增代码return &types.AddReply{ s }, nil // 新增代码return
}

重新编译执行:

# curl -i "http://localhost:8888/add?a=1&b=3"
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-33930e740d4d642dd8a16667af5f6a60-cb450c0bdbb9f6fc-00
Date: Fri, 08 Dec 2023 02:58:48 GMT
Content-Length: 9{"sum":4}

相关文章:

go-zero开发入门-API服务开发示例

接口定义 定义 API 接口文件 接口文件 add.api 的内容如下: syntax "v1"info (title: "API 接口文件示例"desc: "演示如何编写 API 接口文件"author: "一见"date: "2023年12月07日"version: "…...

NVIDIA Jetson NX ubuntu20.04删除多余版本冲突的Boost库

参考Ubuntu16.04 卸载旧版本Boost库并安装新版本 卸载 删除/usr/local/include/boost文件夹,删除/usr/local/lib中和boost有关的文件,以及/usr/local/lib/cmake/中boost的cmake文件 cd /usr/local/lib/ ls | grep boost sudo rm -rf /usr/local/include/boost su…...

【蜗牛到家】获南明电子信息产业引导基金战略投资

智慧社区生活服务平台「蜗牛到家」已于近期获得贵阳南明电子信息产业引导基金、华科明德战略投资。 贵阳南明电子信息产业引导基金属于政府旗下产业引导基金,贵州华科明德基金管理有限公司擅长电子信息产业、高科技产业、城市建设及民生保障领域的投资,双…...

基于ubuntu nc指令实现远程传输文件到嵌入式设备中

背景: 最近在使用nc进行远程文件传输的时候发现在文件传输完成时,没有正确的反馈,而是界面一直停留在传输阶段,加上使用nc传输需要设置一些诸如-l、 -p等参数,于是想将这些参数包裹在sh脚本中,一键执行脚本…...

蓝桥杯 day01 奇怪的数列 特殊日期

奇怪的数列 题目描述 奇怪的数列 从 X 星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 ⋯⋯ YY 博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行…...

properties配置和读取

如何配置和读取属性文件 1.属性文件介绍1.1 什么是属性文件1.2属性文件规范1.3 属性文件优缺点 2.属性文件读取4.spring和属性文件4.1利用注解读取4.2配置文件里直接引用 4.属性文件写入5.注意事项5.总结 1.属性文件介绍 1.1 什么是属性文件 Java开发中,我们经常需…...

如何利用人工智能+物联网技术实现自动化设备生产

随着科技的发展与行业竞争的日益激烈,制造业也逐渐走向智能化发展。制造业的改革是利用物联网技术和自动化设备,实现生产线的智能化和自适应生产,优化生产流程,提高生产效率和质量,为企业创造更大的价值。 方案概述 智…...

STM32CubeMx+MATLAB Simulink串口输出实验

STM32CubeMxMATLAB Simulink串口输出实验 📌《STM32CubeMxMATLAB Simulink点灯程序》📍相关篇《MATLAB Simulink STM32硬件在环 (HIL)实现例程测试》🔖需要的软件支持包:Embedded Coder Support Package fo…...

React中每次渲染都会传入一个新的props.children到子组件?

传入props.children后, 为什么会导致组件的重新渲染? 问题描述 在 react 中, 我想要对组件的渲染进行优化, 遇到了一个非常意思的问题, 当我向一个组件中传入了 props.children 之后, 每次父组件重新渲染都会导致这个组件的重新渲染; 它看起来的表现就像是被memo包…...

Qt 通过命令行编译程序

前言 从服务器拉代码到编译成可执行文件一个脚本解决问题。使用的项目文件见上一个文章 Qt生成动态链接库并使用动态链接库 脚本代码 为了方便易懂这是一个很简单的Qt编译脚本 call E:\vs2015\VC\vcvarsall.bat x86 rmdir /s /q my-project git clone gitgitee.com:wenbai1…...

WireShark监控浏览器登录过程网络请求

软件开发中经常前后端扯皮。一种是用Chrome浏览器的开发者工具 来看网络交互,但是前提是 网络端口的确是通的。 WireShark工作在更低层。 这个工具最大的好处,大家别扯皮,看网络底层的log,到底 你的端口开没开, 数据…...

202301209将RK3399的挖掘机开发板在Android10下设置系统默认为24小时制

202301209将RK3399的挖掘机开发板在Android10下设置系统默认为24小时制 2023/12/9 22:07 应该也可以适用于RK3399的Android12系统 --- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/default…...

智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.参考…...

使用MfgTool烧写工具烧写自制系统

一. 简介 本文我们就来学习,如何将我们编译的 uboot,zImage(内核镜像),xxx.dtb设备树文件,还有制作的根文件系统,这四个文件烧写到开发板中,最后 开发板能正常启动。 上一篇文章说…...

react中使用react-konva实现画板框选内容

文章目录 一、前言1.1、API文档1.2、Github仓库 二、图形2.1、拖拽draggable2.2、图片Image2.3、变形Transformer 三、实现3.1、依赖3.2、源码3.2.1、KonvaContainer组件3.2.2、use-key-press文件 3.3、效果图 四、最后 一、前言 本文用到的react-konva是基于react封装的图形绘…...

es6 相关面试总结

1、es6 是什么 新一代的js 语言标准,对其核心做了升级优化,更加适合大型应用开发。 2、箭头函数优缺点 优点: 1.代码优化 2.this 指向不会变动,永远指向其父元素 缺点: 1.没有arguments 参数 2.不能通过 appl…...

【Hive】——数据仓库

1.1 数仓概念 数据仓库(data warehouse):是一个用于存储,分析,报告的数据系统 目的:是构建面向分析的集成化数据环境,分析结果为企业提供决策支持 特点: 数据仓库本身不产生任何数据…...

算法基础九

螺旋矩阵2 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2: 输入:n …...

QT-在ui界面中给QWidget增加Layout布局的两种方法

2023-12-05 QT-在ui界面中给QWidget增加Layout布局的两种方法 方式一 在UI界面,用拖拽的方式加入Layout方式二 用notepad软件打开.ui文件,手动加入Layout代码 目标:去除右下角红标,给tab标签增加Layout属性。 方式一 在UI界面&am…...

免费的网页数据抓取工具有哪些?【2024附下载链接】

在网络上,有许多网页数据抓取工具可供选择。本文将探讨其如何全网采集数据并支持指定网站抓取。我们将比较不同的数据采集工具,帮助您找到最适合您需求的工具。 网页数据抓取工具种类 在选择网页数据抓取工具之前,让我们先了解一下这些工具…...

Leader让我带5个外包,出了问题算我的,绩效好了算团队的,每天当保姆还不如自己写,管理岗这个坑谁爱跳谁跳

看到一哥们吐槽,说leader让他带5个外包,出了问题算他的,绩效好了算团队的,每天当保姆还不如自己写代码。看完我直接笑出声了——不是觉得好笑,是太真实了,笑的是自己也经历过。说实话,这种事在互…...

Windows Defender Remover终极指南:深度解析系统安全组件移除技术

Windows Defender Remover终极指南:深度解析系统安全组件移除技术 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_…...

Atlas800T A2上部署Qwen2.5-Omni-7B音频模型:从驱动安装到vllm-ascend服务启动的保姆级避坑记录

Atlas800T A2服务器部署Qwen2.5-Omni-7B音频模型全流程实战指南 在昇腾Atlas800T A2服务器上部署多模态大模型Qwen2.5-Omni-7B,对于需要处理音频转文字任务的开发者而言,既是技术挑战也是效率提升的关键一步。本文将带你从零开始,逐步完成从硬…...

长尾关键词SEO优化费用如何计算_企业自营SEO关键词优化成本是多少

长尾关键词SEO优化费用如何计算_企业自营SEO关键词优化成本是多少 在当今数字化时代,SEO(搜索引擎优化)已经成为企业提升网站流量、增加品牌曝光度的重要手段。其中,长尾关键词SEO优化因其较低的竞争度和高转化率,备受…...

5分钟搞定:造相-Z-Image-Turbo亚洲美女LoRA服务搭建与测试

5分钟搞定:造相-Z-Image-Turbo亚洲美女LoRA服务搭建与测试 1. 项目概述 造相-Z-Image-Turbo亚洲美女LoRA是一个基于Z-Image-Turbo模型的图片生成Web服务,特别集成了laonansheng开发的Asian-beauty-Z-Image-Turbo-Tongyi-MAI-v1.0 LoRA模型,…...

OpenClaw定时任务管理:Qwen3-4B每日早报自动生成与推送

OpenClaw定时任务管理:Qwen3-4B每日早报自动生成与推送 1. 为什么需要自动化早报服务 每天早上打开电脑第一件事,就是查看行业动态和技术新闻。但手动收集整理的过程实在太耗时——要打开十几个网页,筛选有价值的信息,再整理成简…...

告别云端依赖!DeepSeek-R1-Distill-Qwen-1.5B离线运行全攻略

告别云端依赖!DeepSeek-R1-Distill-Qwen-1.5B离线运行全攻略 1. 为什么选择离线运行DeepSeek-R1-Distill-Qwen-1.5B? 在AI应用日益普及的今天,大多数用户仍然依赖云端服务来运行大语言模型。但云端服务存在隐私泄露、网络延迟、使用成本高等…...

基于stm32的楼道照明系统[单片机]-计算机毕业设计源码+LW文档

摘要:本文提出了一种基于STM32单片机的楼道照明系统设计方案。该系统以STM32为核心控制器,结合人体热释电感应模块、声音感应模块和光照检测模块,实现楼道照明的智能控制。通过实时检测人体存在、声音信号以及环境光照强度,系统能…...

Claude Code 源码研究【第二弹】:智能体框架与大模型相互成就

在上一篇“Claude Code 源码研究:一个 while(true) 循环让大模型自己干活”之后,继续我们的研究——01自然语言引导能保证模型每次都听话吗?Claude Code 不靠 if-else 控制模型选哪个工具,而是靠 40 份精心撰写的"工具说明书…...

Ubuntu 20.04下Mathematica 12.3安装全攻略(附Jupyter集成技巧)

Ubuntu 20.04下Mathematica 12.3安装与Jupyter集成实战指南 在科研计算与符号数学领域,Mathematica始终保持着不可替代的地位。对于Ubuntu用户而言,安装特定历史版本(如12.3)往往比最新版本更具挑战性——官方默认提供最新版下载&…...