首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guonaihong
V2EX  ›  程序员

流式 http client 关注度不高,朋友们帮提提建议

  •  
  •   guonaihong · 40 天前 · 2529 次点击
    这是一个创建于 40 天前的主题,其中的信息可能已经有所发展或是发生改变。

    疑惑

    下面聊的是 gout,gout 是 go 里面第一个流式 http client。下面是 feaute 列表,数据编解码这块基本做到极致,引入流式概念,既可以 core 很小巧,组合起来也很强大(benchmark 是第一个 filter 函数)。为啥关注度不高?还有哪些需要完善的地方?

    feature

    • 支持 GET/PUT/DELETE/PATH/HEAD/OPTIONS
    • 支持设置请求 http header(可传 struct,map,array,slice 等类型)
    • 支持设置 URL query(可传 struct,map,array,slice,string 等类型)
    • 支持设置 json,xml,yaml 编码到请求 body 里面(SetJSON/SetXML/SetYAML)
    • 支持设置 form-data(可传 struct,map,array,slice 等类型)
    • 支持设置 x-www-form-urlencoded(可传 struct,map,array,slice 等类型) 支持 io.Reader,uint/uint8/uint16...int/int8...string...[]byte...float32,float64 至请求 body 里面
    • 支持解析响应 body 里面的 json,xml,yaml 至结构体里(BindJSON/BindXML/BindYAML)
    • 支持解析响应 body 的内容至 io.Writer, uint/uint8...int/int8...string...[]byte...float32,float64
    • 支持解析响应 header 至结构体里
    • 支持接口性能 benchmark,可控制压测一定次数还是时间,可控制压测频率
    • 等等更多

    项目地址

    https://github.com/guonaihong/gout

    演示

    gout-example.gif

    27 回复  |  直到 2019-12-17 22:14:42 +08:00
    wangsongyan
        1
    wangsongyan   40 天前   ♥ 1
    多在 v2 发帖子
    zunceng
        2
    zunceng   40 天前   ♥ 1
    集成 grpc ?
    popbones
        3
    popbones   40 天前 via iPhone   ♥ 1
    文档改成英文的
    reus
        4
    reus   40 天前 via Android   ♥ 1
    你解决的根本不是痛点,没有
    shunia
        5
    shunia   40 天前   ♥ 1
    优秀的英文文档呗,想热得靠 pr,国人 pr 的热情太低。
    guonaihong
        6
    guonaihong   40 天前
    @popbones 这个版本加上。
    guonaihong
        7
    guonaihong   40 天前
    @reus 哈哈,你的回答最有意思,上次看你怼过几个项目,有的最后 700star,有的 1w   star。
    lishunan246
        8
    lishunan246   40 天前
    给一个不用 net/http 和 valyala/fasthttp 的理由?
    chennqqi
        9
    chennqqi   40 天前
    net/http 足够好了,另外不知道你说的流式是啥意思
    zhaogaz
        10
    zhaogaz   40 天前
    哎,有很多 star 高的项目都是垃圾。。。
    guonaihong
        11
    guonaihong   40 天前
    @lishunan246 用标准库可以慢慢的做一件事,用库可以更爽更快的做一件事。这个看个人喜好了。
    guonaihong
        12
    guonaihong   40 天前
    @zhaogaz 这个没法回答你。做开源项目的人都不喜欢评论别人的开源项目是垃圾,知道几千几万行的撸不容易。如果遇到问题一般直接提 pr 帮原作者完善下。
    gesse
        13
    gesse   40 天前   ♥ 1
    star + watch 了
    stanlry
        14
    stanlry   40 天前 via Android
    建议看看 go-resty,很早就有了
    PiersSoCool
        15
    PiersSoCool   40 天前
    流式调用的好处在哪里?更可读?更简洁?我的确没觉得更爽,net/http 代码可读性肯定比你这好一些,因为他没有封装流式的方法,这对于业务来说是无关的代码。
    所以那解决了 net/http 什么问题?我不知道。所以对标的是什么库,优缺点呢?
    生产环境可使用吗?崩溃了谁能去及时解决?没人想给自己造成麻烦。
    我怎么从 net/http 迁移?全部重写?那是不可能的。
    python
        16
    python   40 天前 via Android   ♥ 1
    支持批量传 url slice 去请求拿响应结果不?
    错误处理呢?
    重试机制有吗?
    相比 fasthttp 性能如何?
    畸形页面的编码问题? gbk ?
    guonaihong
        17
    guonaihong   39 天前
    @PiersSoCool 我下班后回答下,都是挺好的问题。
    guonaihong
        18
    guonaihong   39 天前
    @python 我下班后回答,不错的建议。
    exceptionplayer1
        19
    exceptionplayer1   39 天前
    不错,学习一下
    woostundy
        20
    woostundy   39 天前
    支持。
    我觉得需要个最佳实践项目,来告诉大家用这个库的场景。
    matepi
        21
    matepi   39 天前
    主要还是流式调试起来反人类……自己小玩玩可以,大逻辑项目不敢上
    lishunan246
        22
    lishunan246   39 天前 via Android
    @guonaihong 在什么场景下你的 gout 比标准库和 fasthttp 更爽更快?
    guonaihong
        23
    guonaihong   39 天前
    @stanlry gout 实现的代码现在已经比 go-resty 多,很多功能 gout 有,go-resty 没有,全面超越还是有可能的。go-resty 的立意还是很不错的,不是 python 的 request 的搬砖项目。可惜作者没有好好设计。
    guonaihong
        24
    guonaihong   39 天前
    @lishunan246 抱歉,我上面说的快是开发效率。这点应该没有争议。
    标准库里面的 net/http 至今也没有项目可以撼动其地位。fasthttp 支持 http2 还没成功,作者已经去玩时序数据库了。。。
    guonaihong
        25
    guonaihong   39 天前
    @PiersSoCool 这里面的问题其实很好回答,我讲下自己的事情,以前我们 http server 都是基于标准库的,后面尝试 gin 确实可以提高开发效率就慢慢铺开,在用的过程就提提 pr 优化下。用标准库开发绝对问题,但是开发效率不是最优解。这需要你那么自己权衡。这对于选择任何开源项目都适用。
    guonaihong
        26
    guonaihong   39 天前
    @PiersSoCool 忽略上一条,看这条。这里面的问题其实很好回答,我讲下自己的事情,以前我们 http server 都是基于标准库的,后面尝试 gin 确实可以提高开发效率就慢慢铺开,在用的过程就提提 pr 优化下。用标准库开发绝对很难遇到问题,但是开发效率不是最优解。这需要你那么自己权衡。这对于选择任何开源项目都适用。
    guonaihong
        27
    guonaihong   39 天前
    @python 字符编码不会做,这个点能不到极致,就给更喜欢这点的童鞋做。gout 只做作者能轻松 hold 得住的点,有问题可以快速解决,保守估计再撸 2-3w 行代码还是可以驾驭得住的。

    批量 url 和重试我一直不想加。重试在我遇到的项目里面没有 fast fail 策略来的好使。有兴趣的话,可以在 gout 的 issue 上面一起讨论下。
    guonaihong
        28
    guonaihong   32 天前
    @python 带指数回退的 重试功能已加
    https://github.com/guonaihong/gout#retry
    欢迎试用。至于你提的别的一些功能,在未来在版本也可能实现
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4265 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 33ms · UTC 06:04 · PVG 14:04 · LAX 22:04 · JFK 01:04
    ♥ Do have faith in what you're doing.