Vscode niuhe 插件使用教程(1) - 插件初体验

插件介绍

Vscode niuhe 插件是一款面向 golang 的后端 IDL 定义翻译插件, 支持 go 程序的路由, 出入参定义;同时支持将 idl 翻译为 typescript 定义

插件使用

下面从一个空项目 adminsvr 开始讲解 niuhe 插件的基本使用。使用前需要先安装 niuhe 插件;插件介绍页有详细教程

程序入口

程序默认将项目下的 niuhe/all.niuhe 文件作为入口,在开始前需要读取项目名及配置参数,然后是对应的配置参数读取。

开始前在项目下创建 niuhe 目录和niuhe/all.niuhe 文件。并在其中定义项目名app。此时将项目名定义为adminsvr插件语法高亮请选择为 python

定义请求参数和 API

接下来演示一个简单的 Hello world 例子, 继续编辑我们的 all.niuhe 文件如下:

python 复制代码
#app=adminsvr

class SysTestReq(Message):
    '''测试请求参数'''
    say = required.StringField(desc='这是一个必填 string 类型请求参数')

class SysTestResp(Message):
    '''测试返回参数'''
    answer = required.StringField(desc='作为返回参数时, 必填字段可忽略, 这里是定义类型的')

with services():
    GET('演示例子', '/api/sys/test/', SysTestReq, SysTestResp)
  

下面对上面的代码进行逐行解读:

  • 第1行定义了项目名为 adminsvr
  • 第3行定义了一个名为 SysTestReq 的结构, 其语法为 class 开头,(Message): 结尾
  • 第4行用为结构 SysTestReq 添加注释, 注释语法同 python
  • 第5行为结构定义了一个名为 saystring 的必填参数
  • 第7-9行同3-5行
  • 第11行用 with services(): 作为开始标记, 以下是定义 api 开始
  • 第12行定义了一个路径为/api/sys/testGET api, 其请求结构为 SysTestReq, 返回结构为 SysTestResp.

代码生成

可通过点击(1)资源管理器顶部和(2)工具栏中的 </>图标生成代码,也支持在(3)资源管理器中选中任意文件并右键中 niuhe idl 生成, (4) Command + Shift + P 快捷键中 输入 niuhe 查找 niuhe idl 生成 共4种方式触发代码生成。

方式1和3 方式2 方式4

使用以上方式中的任意一种生成项目基础代码后文件结构如下:

shell 复制代码
.
├── README.md ---- 说明文档
├── conf
│   └── adminsvr.yaml ---- 配置文件
├── makefile  ---- mac/linux 中的 make 定义文件
├── niuhe
│   └── all.niuhe ---- 项目入口
├── niuhe.log --- 生成 log, 如果生成出错, 可根据 log 定义位置
└── src
    └── adminsvr
        ├── app
        │   ├── api --- model 文件夹
        │   │   ├── protos
        │   │   │   └── gen_protos.go --- 自动生成文件
        │   │   └── views --- views 文件夹
        │   │       ├── gen_sys_views.go
        │   │       ├── init.go
        │   │       └── sys_views.go --- 具体入口
        │   └── common
        │       └── consts
        │           └── gen_consts.go -- 常量定义
        ├── config
        │   └── config.go --- conf/*yaml 定义读取文件
        ├── main.go  --- main 入口
        └── xorm --- xorm 定义文件夹, 结构为 model - dao - service
            ├── daos
            │   └── init.go
            ├── models
            │   └── models.go
            └── services
                └── init.go

运行程序

README.md 文件中包含了运行项目的基础说明, 我们先复制 mod 部分代码让程序运行起来 cd src/adminsvr && go mod init adminsvr && go mod tidy && go mod vendor && cd ../../ && make run。 顺利的话可见项目运行起来,此时在浏览器中输入 http://localhost:9999/api/sys/test/?say=hellow 得到如下内容:

json 复制代码
{"message":"Not Implemented","result":-1}

实现 Hello world

src/adminsvr/app/api/views/sys_views.go 文件代码如下

go 复制代码
package views

// Generated by niuhe.idl

import (
	"adminsvr/app/api/protos"

	"github.com/ma-guo/niuhe"
)

type Sys struct {
	_Gen_Sys
}

// 演示例子
func (v *Sys) Test_GET(c *niuhe.Context, req *protos.SysTestReq, rsp *protos.SysTestResp) error {
	return niuhe.NewCommError(-1, "Not Implemented")
}
func init() {
	GetModule().Register(&Sys{})
}

第18行即为我们访问得到的结果, 接下来我们修改方法实现实现 hello world, 修改后 16-19行代码为

go 复制代码
// 演示例子
func (v *Sys) Test_GET(c *niuhe.Context, req *protos.SysTestReq, rsp *protos.SysTestResp) error {
	rsp.Answer = req.Say + " world!"
	return nil
}

再次运行代码(make run)并访问http://localhost:9999/api/sys/test/?say=hellow 得到如下内容:

json 复制代码
{"data":{"answer":"hellow world!"},"result":0}

以上即实现了 niuhe 插件实现 从 idl 转译为 go 的初体验

相关推荐
煎鱼eddycjy17 小时前
新提案:由迭代器启发的 Go 错误函数处理
go
煎鱼eddycjy18 小时前
Go 语言十五周年!权力交接、回顾与展望
go
不爱说话郭德纲1 天前
聚焦 Go 语言框架,探索创新实践过程
go·编程语言
0x派大星3 天前
【Golang】——Gin 框架中的 API 请求处理与 JSON 数据绑定
开发语言·后端·golang·go·json·gin
IT书架3 天前
golang高频面试真题
面试·go
郝同学的测开笔记3 天前
云原生探索系列(十四):Go 语言panic、defer以及recover函数
后端·云原生·go
秋落风声4 天前
【滑动窗口入门篇】
java·算法·leetcode·go·哈希表
0x派大星5 天前
【Golang】——Gin 框架中的模板渲染详解
开发语言·后端·golang·go·gin
0x派大星6 天前
【Golang】——Gin 框架中的表单处理与数据绑定
开发语言·后端·golang·go·gin
三里清风_7 天前
如何使用Casbin设计后台权限管理系统
golang·go·casbin