V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
chrislon
V2EX  ›  Go 编程语言

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

  •  
  •   chrislon · 2016-09-12 13:48:19 +08:00 · 2414 次点击
    这是一个创建于 2791 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要是用 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

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

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


    taresky
        7
    taresky  
       2016-09-12 14:48:57 +08:00
    Lucius
        8
    Lucius  
       2016-09-12 14:50:41 +08:00
    @taresky 你发我女朋友微博干啥? 请保护他人的隐私
    Lonely
        9
    Lonely  
       2016-09-12 14:52:21 +08:00 via iPhone
    楼这么快就歪了
    xAx
        10
    xAx  
       2016-09-12 14:55:27 +08:00
    一帮程序员屌丝又在盗图吹女友了
    xAx
        11
    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
        12
    qcloud  
       2016-09-12 15:01:14 +08:00   ❤️ 2
    neoblackcap
        13
    neoblackcap  
       2016-09-12 15:02:34 +08:00
    7 楼已经算对楼主好的了,之前我在百度里面看过扒皮扒得更惨的
    SourceMan
        14
    SourceMan  
       2016-09-12 15:04:36 +08:00
    哟,好贴,赶紧收藏下,下午回来看
    Jakesoft
        15
    Jakesoft  
       2016-09-12 15:24:46 +08:00
    好帖(tu), mark
    ICU
        16
    ICU  
       2016-09-12 15:40:29 +08:00
    好强你们,话说是怎么根据图片翻出这么多信息的?
    pizida
        17
    pizida  
       2016-09-12 15:42:29 +08:00
    百度识图,谷歌识图。
    楼主,我不是来拆台的...
    ebony0319
        18
    ebony0319  
       2016-09-12 15:42:37 +08:00
    要不是看了 7 楼我就差点信了 6 楼。
    god
        19
    god  
       2016-09-12 15:52:03 +08:00
    chrislon
        20
    chrislon  
    OP
       2016-09-12 16:15:49 +08:00
    @Lucius 拜托了
    frozenshadow
        21
    frozenshadow  
       2016-09-12 16:18:01 +08:00
    哈哈哈,这楼歪的可以啊。下班刷新再看看
    xylitolLin
        22
    xylitolLin  
       2016-09-12 16:18:08 +08:00
    留名看戏
    chrislon
        23
    chrislon  
    OP
       2016-09-12 16:20:03 +08:00
    换头像正楼
    aisk
        24
    aisk  
       2016-09-12 16:27:43 +08:00
    楼主前女友哆啦 A 梦?黑人问好.gif
    frozenshadow
        25
    frozenshadow  
       2016-09-12 16:57:46 +08:00
    @aisk 之前是六楼的妹子
    weaming
        26
    weaming  
       2016-09-12 17:04:59 +08:00
    v2ex 要变发车场了吗
    Karblue
        27
    Karblue  
       2016-09-13 09:19:07 +08:00
    来晚了吗。我要上车。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   970 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:42 · PVG 02:42 · LAX 11:42 · JFK 14:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.