用 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

2460 次点击
所在节点    Go 编程语言
27 条回复
BMW
2016-09-12 14:14:47 +08:00
妹子,你还需要自己动手写代码?
magicdawn
2016-09-12 14:18:31 +08:00
楼主估计用的女神头像
chrislon
2016-09-12 14:30:45 +08:00
@magicdawn 前女友
jiangbingo
2016-09-12 14:41:32 +08:00
现任看到会是什么感觉?
hansnow
2016-09-12 14:45:39 +08:00
已经没人关注楼主写的东西了,楼主,讲出你头像的故事吧
Lucius
2016-09-12 14:48:36 +08:00
你就是我女朋友的前任啊? 世界真小

子湄是个好姑娘,我会替你照顾好她的


taresky
2016-09-12 14:48:57 +08:00
Lucius
2016-09-12 14:50:41 +08:00
@taresky 你发我女朋友微博干啥? 请保护他人的隐私
Lonely
2016-09-12 14:52:21 +08:00
楼这么快就歪了
xAx
2016-09-12 14:55:27 +08:00
一帮程序员屌丝又在盗图吹女友了
xAx
2016-09-12 14:57:46 +08:00
https://www.google.com/search?tbs=sbi:AMhZZit8tufyJwAu_1v7TnT-mt0K5SVmcA4qPXU4sh7o7H-vT4qecU1iEZc6fOJ2UUgdnjePAraPbPXGh31i78bqZP34YDie8DLzRF0qoA2BGW6XQzXZqeGDqvkd09Q0WHyPVspT2ok_1PGhMyY60ifGyiWNa4niXp_1y2sNuGMGjua39OsWJFJT3pLAOXYtTsOcjVVZ_1rq7VTEO5Dm2rYgENjCP3t25dWtDPaihVZPbjkUogbZGhEhSUCdhej5fNXloRkdCTsay9VTLjogh7yrjAFHJ8GA3-SJQXf8g2O2e6KaBh0mx-XJGGL4Qh-ypHDH-UgNM8r_1DctUClExuKS7ayuyBghdvqnxrmTmEV6wOpxqEWHWdFRErgwyeBMEn6xhbCRTpGj_1fy4CmxQcyB0GnW8CoxpnAgSaxTR95vJp3ppWI3hqkZeQ2I8jrG_1gywDN_187yccu41ZbpTqWu2zD7mJTLv1qI5KnCT_1-WRnBAlUQML8LpcLx3X_1zqOzjtEs7iKpRIY89aAQDR4EOYniNQPAVC_1EeFmM_1s_1AijifFMxR7QzWdv94_16gM_17jo6QVd2zb4vnpV73cMD-NhNvaogKq11vAOIAjrZxTmMRire_1R-Rdb0cWvLRDW1diR_1XWNETx1xCjfls66WfSts0cOaHrOgGOVmKevARWGg6ce5GjHyGqRCVfvGB4wupRZNUeCWsiOTKE7Ye5s0yFykuk4to8PqyrXuu3O_1RTZAqZ94jORztkiiJRZ97sTNeemp1CNOrlnOs5g7Df-qcKCRKXu2exBo1JV6ZN_1tU7yThnmaVW_1XXXtVZaDY4IiS6h9WP-0Y-4MKxoRkRwdwqRkN34z7DmOQADg2mF3rrlg_1JSFN3p43kmNS3d2XrqBdrLWl_103BZ12_1J0P_1lnfFL5Y4MC8VGkIrIidt77baoUP2DBGsUuWypsLm_1EG7uozT38IA9WXE6MSmoRS6zxhhOxgJMefn_1Lg-2xvtoteSIQKAOIMq7O915sEhe3-tIG1cT4F7tOVibj1zvHxxKcNC_1xW4K8o-hmclN88r1woJOxzt1XMYweUwICqLmdvVItZqUVqDCAxdbk9FjnIANIB5iZu63yqs8FStNKP8SYClkxOcPpaYymEeH-ecqi7DkHSYri6QRzbUqYvrLr7HA0vYkH7nAaph-FSdKCPN8GpR8itHk20B09E1nVrj-rS1jOLnPNwLxhA686vzRLv43z0vGFUqbMyxFGzrpTimJe9kFzcE2FuJi7b56QyZk2BwMSe9TLVP96jNJx0sfBk6cdtRXXl-UJsWa1sRUIlk2sdaN5kBqahmXkkfxS5n0UpGaqvc_1igeCLqN1iu-g_1NNft3VKz8ACT-xqQmaimPDTTfZ4l2ENCUlMj3Qyb2NEapTt_1sXYKO7JWUJYuVUKj_1LmfmEdyc680q9W3Oo9M-am3HVXYxCnxJ2L_1QPL9qqq3EtY0pG-DFBuRNPFPzuz0mnB4EBX6SjLDoP8eAIV3_1hvHrzNjrwK6zyGV35bgCnnm2YktMfS-QFDRQ3sNgMzEW_1gnNjwpIY2dzpNdqF9FRjpP33V7BhEjXhKh2orIgyV6q2eXu5QhF78nhvaxErDfqYAVlLEIYvMjpP6Gxjvuet_11E7Ckk-hGIoNpoRBp_1NoLbtUNFo5zDRZCCZahCyAo9NUiMHXS&hl=zh-CN
qcloud
2016-09-12 15:01:14 +08:00
neoblackcap
2016-09-12 15:02:34 +08:00
7 楼已经算对楼主好的了,之前我在百度里面看过扒皮扒得更惨的
SourceMan
2016-09-12 15:04:36 +08:00
哟,好贴,赶紧收藏下,下午回来看
Jakesoft
2016-09-12 15:24:46 +08:00
好帖(tu), mark
ICU
2016-09-12 15:40:29 +08:00
好强你们,话说是怎么根据图片翻出这么多信息的?
pizida
2016-09-12 15:42:29 +08:00
百度识图,谷歌识图。
楼主,我不是来拆台的...
ebony0319
2016-09-12 15:42:37 +08:00
要不是看了 7 楼我就差点信了 6 楼。
god
2016-09-12 15:52:03 +08:00
chrislon
2016-09-12 16:15:49 +08:00
@Lucius 拜托了

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

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

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

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

© 2021 V2EX