之前写 Node.js 最近入坑 Go,我在 js 里有如下一个 js 文件用来定义所有 api 的返回结果
code.js
module.exports = {
SUCCESS: {code: 0, msg: '操作成功'},
FAIL: {code: 100, msg: '未知错误'}
// .... 省略
}
调用的时候只用code.SUCCESS
现在用 Go 应该如何定义这个文件呢?
1.map:取值的话是 map["SUCCESS"] 这样,因为 key 是字符串实际在敲代码的过程中可能会因为 key 拼写错误而导致取不到想要的值
2.struct:得先定义好所有的 key,但是实例化这个 struct 的时候还得把上面的 key 全部敲一遍,重复的代码量有点大
各位大佬还有什么更好的办法吗?
1
dabaibai 2019-01-21 19:29:26 +08:00
可能需要反射??
|
2
iceheart 2019-01-21 19:32:06 +08:00 via Android
go 支持多参返回,不用这玩意儿
|
3
rick12 2019-01-21 19:33:10 +08:00 via iPhone
嵌套 struct ?
|
5
imherer OP @rick12 对的,struct 是可以实现的,主要是用 struct 话我得这样定义
```` type MainCode struct { SUCCESS Detail FAIL Detail } type Detail struct { ID int Msg string } var Code MainCode func init() { Code = MainCode{ SUCCESS: Detail{100, "未知错误"}, FAIL: Detail{0, "操作成功"}, } } ```` 在 init 里得把所有的 MainCode 里的 key 全部得敲一遍 目前好像也只能这样了? |
6
imherer OP @iceheart 我知道支持多参返回,我是想把所有可能返回的结果在 code 定义了,不同的 api 返回什么样的状态直接从这个 code 里取
|
8
icexin 2019-01-21 19:48:02 +08:00 1
var (
SUCCESS = map[string]interface{}{"code":0, "msg": "操作成功"} FAIL = map[string]interface{}{"code":100, "msg": "未知错误"} ) 或者定义一个包含 code 和 msg 字段的结构体,SUCCESS 和 FAIL 是对应的实例 |
10
reus 2019-01-21 20:40:11 +08:00
我觉得既然都有 SUCCESS、FAIL 了,再引入 0、100 简直多余,直接把 SUCCESS 这个字符串返回给前端不就得了,一目了然,不用再查表
http 的 1xx 2xx 3xx 4xx 等按照类型分几种都还略好,但仍然是过时的设计 |
11
Trim21 2019-01-21 21:30:06 +08:00 via Android
你再定义一个 success=“ SUCCESS ”算了…
|
14
imherer OP @reus 这里的 SUCCESS,FAIL 是给后端开发人员看的,code 是 api 说明给出去的
httpcode 满足不了实际中会遇到的多种情况 |