Golang Go语言中如下格式的返回码应该如何实现

发布于 1周前 作者 ionicwang 来自 Go语言

Golang Go语言中如下格式的返回码应该如何实现

之前写 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 全部敲一遍,重复的代码量有点大

各位大佬还有什么更好的办法吗?


更多关于Golang Go语言中如下格式的返回码应该如何实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

18 回复

可能需要反射??

更多关于Golang Go语言中如下格式的返回码应该如何实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go 支持多参返回,不用这玩意儿

嵌套 struct ?

我去看看反射弧是个什么东西

对的,struct 是可以实现的,主要是用 struct 话我得这样定义
<br>type MainCode struct {<br> SUCCESS Detail<br> FAIL Detail<br>}<br><br>type Detail struct {<br> ID int<br> Msg string<br>}<br><br>var Code MainCode<br><br>func init() {<br> Code = MainCode{<br> SUCCESS: Detail{100, "未知错误"},<br> FAIL: Detail{0, "操作成功"},<br> }<br>}<br>
在 init 里得把所有的 MainCode 里的 key 全部得敲一遍
目前好像也只能这样了?

我知道支持多参返回,我是想把所有可能返回的结果在 code 定义了,不同的 api 返回什么样的状态直接从这个 code 里取

可以定义在一个包里面

var (
SUCCESS = map[string]interface{}{“code”:0, “msg”: “操作成功”}
FAIL = map[string]interface{}{“code”:100, “msg”: “未知错误”}
)
或者定义一个包含 code 和 msg 字段的结构体,SUCCESS 和 FAIL 是对应的实例

感谢,这个好像是目前最简便的方法

我觉得既然都有 SUCCESS、FAIL 了,再引入 0、100 简直多余,直接把 SUCCESS 这个字符串返回给前端不就得了,一目了然,不用再查表

http 的 1xx 2xx 3xx 4xx 等按照类型分几种都还略好,但仍然是过时的设计

你再定义一个 success=“ SUCCESS ”算了…

不过时,真正处理的东西多了就知道为什么要 ode 了

😂这未尝也不是一种办法

这里的 SUCCESS,FAIL 是给后端开发人员看的,code 是 api 说明给出去的
httpcode 满足不了实际中会遇到的多种情况

一个整数和一个字符串没有什么区别,字符串还能一眼看出是什么错误

为什么 api 不用字符串?

#15 code 设置为数字比字符串方便。

比如 0x1000-0x9999 之间的错误都是需要重新登陆,原因分别是未登录、登陆超时、密码被修改造成登陆失效。前端直接判断在这个范围就显示错误消息并跳转到登录界面。

有些时候也会按位来提供更详细的信息,不过前端用位标记的不多。

这些一样可以用字符串表达

在Golang中,实现特定格式的返回码通常涉及定义一个结构体来表示响应数据,其中包含一个用于返回码的字段。以下是一个基本示例,展示了如何实现这一功能:

首先,定义一个响应结构体,该结构体包含一个状态码(可以是HTTP状态码或其他自定义代码)和数据字段:

type Response struct {
    Code    int         `json:"code"`
    Message string      `json:"message"`
    Data    interface{} `json:"data,omitempty"`
}

在代码中,可以创建一个函数来生成这些响应。例如:

func SuccessResponse(data interface{}) Response {
    return Response{
        Code:    200,
        Message: "Success",
        Data:    data,
    }
}

func ErrorResponse(code int, message string) Response {
    return Response{
        Code:    code,
        Message: message,
    }
}

然后,在API处理函数中,可以使用这些函数来生成响应:

func SomeHandler(w http.ResponseWriter, r *http.Request) {
    // 处理请求...
    data := map[string]string{"key": "value"}
    response := SuccessResponse(data)

    // 将响应编码为JSON并发送给客户端
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(response)
}

通过这种方式,你可以轻松地在Go应用中实现统一格式的返回码,并保持代码的整洁和可读性。

回到顶部