【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项

【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:’ | ‘IDENT’ | ‘INT’, got ‘(’ 报错解决方案及api路由注意事项


大家好 我是寸铁
总结了一篇Error: user.api 27:9 syntax error: expected ‘:’ | ‘IDENT’ | ‘INT’, got ‘(’ 报错解决方案及api路由注意事项的文章✨
喜欢的小伙伴可以点点关注

问题背景

大家好,我是寸铁!今天在使用goctl 一键转换代码时,出现了个小bug。下面我们一起来看一下这个bug是什么?


编写api 文件如下:

PS: 这段代码添加了路由前缀
@server (
prefix: /api/users
)

user.api

//这里的type后面的字段一定要大写
//登录的请求信息 登录的入参
type UserCreateRequest {
	Username string `json:"username"`
	Password string `json:"password"`
}

//定义用户信息
type UserInfoResponse {
	//用户的id
	UserId uint `json: "user_id"`
	//用户的名字
	Username string `json: "username"`
}

//生成路由公共的前缀
//后面的Post和Get请求的路由省略掉公共的前缀部分
@server (
	prefix: /api/users
)
//服务注册
service users {
	@handler userInfo
	get /:id returns (UserInfoResponse)

	@handler userCreate
	post / (UserCreateRequest) returns (string)
}

接着使用goctl 进行一键转换

goctl api go -api user.api -dir.

再检查了上面的语法后,暂时没发现什么明显的语法错误。
运行一下命令,结果如下:

【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项_第1张图片


具体如下:

Error: user.api 27:9 syntax error: expected ‘:’ | ‘IDENT’ | ‘INT’, got ‘(’

错误排查

很熟悉的错误,我想了一下,这不就是我之前写的报错解决方案的博客?

【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘报错解决方案

那按照这个看一下是不是: 的问题?

Step1

首先,定位到报错的那一行代码。

在这里插入图片描述

很明显这里没有: ,所以和之前的报错是不一样的类型

Step2

这里传入入参UserCreateRequest和返回出参string,没问题。
那试一下把所有的/ 目录左右的位置靠拢一下。

【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项_第2张图片

还是报错如下:

Error: user.api 27:9 syntax error: expected ‘:’ | ‘IDENT’ | ‘INT’, got ‘(’

这说明问题不在于位置。

Step3

不妨看一下官方文档,会不会是与这个/有关。
我这里的编写是直接访问/目录即可,无需添加其他的子路由。

官方文档如下:
是有添加子路由的
【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项_第3张图片

官方没有说明api文件的编写不能用/直接访问


所以,不妨试一下是不是这个问题?
在根目录/的基础上,添加子路由userCreate

在这里插入图片描述


执行goctl ,结果如下:
在这里插入图片描述
转换成功!


总结

这说明在使用@server 设置路由前缀的基础上,不能直接访问根目录,需要设置子路由!这也是官方说明文档更新信息的一个小缺漏。


类似文章

【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘报错解决方案

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

往期好文

保姆级教程

【保姆级教程】Windows11下go-zero的etcd安装与初步使用

【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero

【Go-Zero】手把手带你在goland中创建api文件并设置高亮


报错解决

【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

【Go-Zero】【error】 failed to initialize database, got error Error 1045 (28000):报错解决方案

【Go-Zero】Error 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)报错解决方案

【Go-Zero】type mismatch for field “Auth.AccessSecret“, expect “string“, actual “number“报错解决方案

【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘报错解决方案

【Go-Zero】Windows启动rpc服务报错panic:context deadline exceeded解决方案


Go面试向

【Go面试向】defer与time.sleep初探

【Go面试向】defer与return的执行顺序初探

【Go面试向】Go程序的执行顺序

【Go面试向】rune和byte类型的认识与使用

【Go面试向】实现map稳定的有序遍历的方式

你可能感兴趣的:(go,golang,api,路由,syntax,error,后端,gozero,解决方案)