用 golang 写 http JSON 接口的同学可以试试这个迷你库

2016-09-12 13:48:19 +08:00
 chrislon

主要是用 nex.Handler 把一个处理业务逻辑的 Endpoint 转成一个符合 http.Handler 接口的结构, 在请求过来的时候自动将 Request.Body 的内容 Unmarshl 为 golang 的结构, 函数返回时自动将返回的结果 Marshal 为 JSON 结构, 传回客户端.

Talk is cheap, show you the code.

package main

import (
    "errors"
    "fmt"
    "net/http"

    "github.com/chrislonng/nex"
)

type LoginRequest struct {
    Username string `json:"username"`
    Password string `json:"password"`
}

type LoginResponse struct {
    Result string `json:"result"`
}

type ErrorMessage struct {
    Code  int    `json:"code"`
    Error string `json:"error"`
}

func main() {
    // customize error encoder
    nex.SetErrorEncoder(func(err error) interface{} {
        return &ErrorMessage{Code: -1, Error: err.Error()}
    })

    mux := http.NewServeMux()
    mux.Handle("/test1", nex.Handler(test1))
    mux.Handle("/test2", nex.Handler(test2))

    http.ListenAndServe(":8080", mux)
}

// regular response
func test1(m *LoginRequest) (*LoginResponse, error) {
    fmt.Printf("%+v\n", m)
    return &LoginResponse{Result: "success"}, nil
}

// error response
func test2(m *LoginRequest) (*LoginResponse, error) {
    fmt.Printf("%+v\n", m)
    return nil, errors.New("error test")
}

觉得有用就 Star 一下吧

传送门: https://github.com/chrislonng/nex

2462 次点击
所在节点    Go 编程语言
27 条回复
frozenshadow
2016-09-12 16:18:01 +08:00
哈哈哈,这楼歪的可以啊。下班刷新再看看
xylitolLin
2016-09-12 16:18:08 +08:00
留名看戏
chrislon
2016-09-12 16:20:03 +08:00
换头像正楼
aisk
2016-09-12 16:27:43 +08:00
楼主前女友哆啦 A 梦?黑人问好.gif
frozenshadow
2016-09-12 16:57:46 +08:00
@aisk 之前是六楼的妹子
weaming
2016-09-12 17:04:59 +08:00
v2ex 要变发车场了吗
Karblue
2016-09-13 09:19:07 +08:00
来晚了吗。我要上车。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/305653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX