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

go 是个好语言

 
  •   baojiwei 2019-04-08 00:38:09 +08:00 10229 次点击
    这是一个创建于 2388 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学 go。

    去年 Qcon 听了下 go 语言介绍,很多特性当时听怕了,还是让我觉得有点不习惯。不过实际看了下,其实也还好。 如果能够像 python 一样简单明了,少一些约定,就更好用了。(当然 python 的约定也不少,设计理念也要画不少脑力去想,比如鸭子方法)

    感觉很多操作都很需要技巧(这点 py 也是,不过 py 的技巧用的很舒服),需要技巧就需要对语言很熟悉的了解,不像 Java、C#一看看上去就很稳重,不搞事情。

    1. 轮子稍显有点少。不知道看哪些主流轮子。求各位大佬推荐。
    2. 想加入一个 go 的社团。python 的社团很强大(至少在国外是很强大,去年国内的 pycon 开成那个样子,和 python 语言的热度形成鲜明对比)。不知道有没有大佬引进圈子。
    3. 各位大佬有没有好的项目或者轮子推荐一下,我想看着代码学 go。最好是能体现语言特性和设计思路,但是入门难度也不要太大的项目。比如,python 下我就会去看 sentry 或者 celery 或 flask 的源码(吐槽下 celery 的源码,:-()。最好是类似于这种类型的项目,能看到语言本身的特性。

    谢谢各位大佬推荐。

    49 条回复    2019-04-09 19:11:36 +08:00
    septvean
        1
    septvean  
       2019-04-08 01:19:18 +08:00   1
    secondwtq
        2
    secondwtq  
       2019-04-08 01:28:51 +08:00   1
    我觉得 Go 轮子不少啊,楼主有这种感觉应该是和 Python,Java,JS 比吧
    我认为一个编程语言,各方面都有一个能用的轮子,并且生产环境验证过,当你想用的时候能找到,这就基本够了
    太多的轮子会增加选择成本,影响新入行的人的学习,加重”派系分化“,说是社区活力的体现,其实同时也体现了社区的不稳定,特别对于比较小众的语言,社区在特定方向上有限的精力被分散在不同的具体项目上,旁观者会发现轮子多而不精(是不是说得有些恐怖了)
    你看 JS 都淘汰多少轮子了
    AngryPanda
        3
    AngryPanda  
       2019-04-08 01:35:23 +08:00 via Android
    看 go 的标准库源码可以吗
    orangeade
        4
    orangeade  
       2019-04-08 02:57:51 +08:00 via Android   2
    go 主要看容器 /微服务那块就行了,
    web 开发性价比不高,社区也比不上容器 /微服务 /中间件之类
    baojiweicn2
        5
    baojiweicn2  
       2019-04-08 02:58:14 +08:00 via Android
    @septvean 这就是很尴尬的地方,我完全赞同 @secondwtq 的观点,只需要一到两个有特色的主流框架就好了,awesome go 有点略多,新手有点懵
    halo11
        6
    halo117  
       2019-04-08 03:50:29 +08:00 via iPhone
    @secondwtq 至少现在看 go 的 web 框架轮子也多到泛滥,设计风格未必相一致,但目的都是在同一件事而重复造轮子
    cxh116
        7
    cxh116  
       2019-04-08 07:37:46 +08:00 via Android   4
    Go 语言的优点,缺点和令人厌恶的设计 https://studygolang.com/articles/12907
    jjx
        8
    jjx  
       2019-04-08 07:50:21 +08:00
    业务上的轮子还是不多

    应该是原来用 go 的不涉及具体业务场景

    不过随着 go 进入具体的业务场景, 这些轮子应该也会多的吧
    baojiweicn2
        9
    baojiweicn2  
       2019-04-08 08:01:42 +08:00 via Android
    @cxh116 去年 qcon 听到小哥很热情洋溢的说 exception 在前的设计,并且大概说到"我觉得对的,应该不会改"的时候,被吓到了。但是 go 的性能真的好。
    baojiweicn2
        10
    baojiweicn2  
       2019-04-08 08:05:59 +08:00 via Android
    @secondwtq 我觉得关于社区的坏处说的也对,但是社区火热也是好的,比如同一个方向大家都造轮子,但是思路上不同,社区能够很快筛选出最合适的最热门的来,比如,python 的 backend,3.6 协程出来的时候,sanic 等异步框架大家都叫好,但是很快使用度就证明了这不是协程使用的正确姿势。包括 tf 和 pytorch 之争也一样。
    love
        11
    love  
       2019-04-08 08:22:14 +08:00 via Android   2
    听说 go 用 tab 缩进,我就吓得再也没看一眼
    BBCCBB
        12
    BBCCBB  
       2019-04-08 08:42:01 +08:00   1
    @love 瞎说,没限制用 tab 还是 space,或者几个 space
    tt67wq
        13
    tt67wq  
       2019-04-08 08:43:33 +08:00   1
    你应该找个用 go 的公司,啥社区都不好使,天天用你才知道,这个语言就那么回事
    love
        14
    love  
       2019-04-08 09:00:09 +08:00 via Android
    @BBCCBB 这个格式社区总是有一个标准的吧,我记得好像是用 tab
    baojiweicn2
        15
    baojiweicn2  
       2019-04-08 09:11:29 +08:00 via Android
    @tt67wq 等我学完,我就成我司全村的 go2school 的希望了
    zeromake
        16
    zeromake  
       2019-04-08 09:18:47 +08:00
    laogui
        17
    laogui  
       2019-04-08 09:19:20 +08:00 via Android
    go 的轮子也超多了,不爽的是大部分轮子都不温不火,想找些第三方包很难判断哪个好,哪个比较稳定。
    trys1
        18
    trys1  
       2019-04-08 09:31:00 +08:00 via Android
    @baojiweicn2 我最近在看 python,想请问一下,sanic 如果不是现在协程 web 开发的正确姿势,那么正确姿势是什么?
    baojiweicn2
        19
    baojiweicn2  
       2019-04-08 09:41:17 +08:00 via Android   1
    @trys1 sanic 是基于 uvloop 的,很多设计有点奇怪。如果做 web 的话,会选择使用常用框架加 uwsgi 或者 gunicorn,或者 gevent
    baojiweicn2
        20
    baojiweicn2  
       2019-04-08 09:48:48 +08:00 via Android
    @trys1 sanic 很大的问题在于,完全没有办法魔改框架,因为它自己就是魔鬼[手动捂脸],协程的优势在于阻塞 io 会有性能上的突破(主要是躲开了 gil 大锁),不幸的是 asyncio 的非阻塞 io 框架都比较弱,没有经过生产的检验,比如就没有好的协程 orm。aiohttp 是很好的库。
    django 的最新版本已经支持协程了,了解一下。
    celery 的 future feature list 里面也已经有了对协程支持了。
    Vegetable
        21
    Vegetable  
       2019-04-08 09:53:05 +08:00   1
    @trys1 我觉得 sanic 这个姿势没问题.python3 已经发布这么多年了还不是一大票人用 py2?async/await 出来之后大家觉得很棒,但是并不会马上切过去而已.同时 sanic 现在也并不成熟,3.6 和 3.7 下的代码都不能通用.

    python web 这么多年下来,能生存就意味着协程不是必要的.说协程不是 web 最佳实践我是认同的.没那么大必要.uvloop 提供的所谓 blazing fast 更多是一种炫技
    no1xsyzy
        22
    no1xsyzy  
       2019-04-08 10:27:29 +08:00
    @love Linux 内核的代码规范甚至是 8 宽 tab
    https://www.kernel.org/doc/html/v4.17/process/coding-style.html#indentation
    也别看了。
    jojopro
        23
    jojopro  
       2019-04-08 14:32:44 +08:00
    首先一些被墙的包会让你抓狂 虽然可以使用代理
    baojiwei
        24
    baojiwei  
    OP
       2019-04-08 14:38:53 +08:00
    @jojopro 嘿嘿嘿,路由器自带 ss,在办公室写代码感觉还是很舒服的
    LifStge
        25
    LifStge  
       2019-04-08 15:11:48 +08:00 via iPhone
    so let ’ s go
    blacklee
        26
    blacklee  
       2019-04-08 15:28:02 +08:00
    那么到底用哪个包管理工具呢?
    secondwtq
        27
    secondwtq  
       2019-04-08 18:48:42 +08:00
    @baojiweicn2 我只是专门挑坏处说的
    onlyhuiyi
        28
    onlyhuiyi  
       2019-04-08 22:33:02 +08:00
    @blacklee 可以用 go mod
    ManjusakaL
        29
    ManjusakaL  
       2019-04-08 22:36:27 +08:00
    可以吐槽下去年的 pycon (我是北京和成都场的负责人。。

    欢迎黑&提建议。。

    今年继续改进。。
    ManjusakaL
        30
    ManjusakaL  
       2019-04-08 22:40:59 +08:00   1
    @baojiweicn2 实际上目前的协程库都没法规避 GIL。没法规避 GIL 带来的副作用也很多。。典型的一个 block,全局 block。

    而且 asyncio 就不说了,17 年的爆出来的 SSL 链接泄露问题到现在都没修,官方直接劝退

    可以参看我之前的吐槽

    https://www.zhihu.com/question/266094857/answer/304655007

    和官方的 BPO

    https://bugs.python.org/issue29406

    所以 Python 的协程路还长。。
    baojiwei
        31
    baojiwei  
    OP
       2019-04-08 22:52:56 +08:00
    @ManjusakaL 有种背后说坏话被抓到的赶脚。[给大佬跪了]
    ligyxy
        32
    ligyxy  
       2019-04-08 23:22:51 +08:00
    b00tyhunt3r
        33
    b00tyhunt3r  
       2019-04-09 02:19:16 +08:00 via iPad
    可惜我们做大型游戏开发 go 完全不能用
    SlipStupig
        34
    SlipStupig  
       2019-04-09 07:00:15 +08:00
    go 没有 sklearn、gensim 和 pandas 这种生态,如果有了,果断放弃 python
    yesono
        35
    yesono  
       2019-04-09 08:09:41 +08:00
    对运维来说,go 太方便了。就一个二进制 平台通用。在 k8s 跑起来简单,镜像小,性能等等特点。现在很大公司后端微服务等底层基础架构用 go 开发的多。
    devtk
        36
    devtk  
       2019-04-09 08:11:23 +08:00
    @jojopro golang.org 的包在 github 有 mirror
    thet
        37
    thet  
       2019-04-09 08:52:50 +08:00 via Android
    @love 有 go fmt 你慌啥,go 格式都是统一的
    baojiweicn2
        38
    baojiweicn2  
       2019-04-09 09:33:38 +08:00 via Android
    @yesono 编译后是方便,但是 docker+k8s 对很多语言和框架都很友好了,运维难度都大大降低
    baojiweicn2
        39
    baojiweicn2  
       2019-04-09 09:34:48 +08:00 via Android
    @SlipStupig go 还是有一些不方便的,而且 go 作为工程化数学语言还是要比 r 和 python 弱一些
    dabaibai
        40
    dabaibai  
       2019-04-09 09:42:24 +08:00
    go 很好玩 对于我这种写了 10 年的 C/C++的来讲 简直不要太舒服
    toma77
        41
    toma77  
       2019-04-09 09:44:10 +08:00
    gin
    yingyue
        42
    yingyue  
       2019-04-09 09:52:12 +08:00 via Android
    @love 我都是要换行了,直接回车键,IDE 自动缩进
    BosenY
        43
    BosenY  
       2019-04-09 10:05:57 +08:00
    beego , gin
    wangxiaoaer
        44
    wangxiaoaer  
       2019-04-09 10:37:02 +08:00
    就想问一个问题,商业公司能提供闭源的 go SDK 供二次开发吗? 不能的话还是洗洗睡吧。
    liuxin5959
        45
    liuxin5959  
       2019-04-09 11:03:12 +08:00
    P......PHP 是...
    1762628386
        46
    1762628386  
       2019-04-09 11:07:52 +08:00
    世界上最好的语言
    ManjusakaL
        47
    ManjusakaL  
       2019-04-09 12:55:37 +08:00 via Android
    @baojiwei 不存在……随意吐槽,我们本来就有很多不足,吐槽才能进步
    baojiwei
        48
    baojiwei  
    OP
       2019-04-09 17:01:28 +08:00
    @1762628386 php...是
    opentrade
        49
    opentrade  
       2019-04-09 19:11:36 +08:00 via Android
    go 最蛋疼的地方是没有模板支持,interface{}到处飞,增加代码冗余度。没有 exception,error 检查嵌套又增加了代码冗余度。go2 已经着手解决模板这个问题。广告一下我的 go 项目
    https://github.com/opentradesolutions/opentick
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2356 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 15:52 PVG 23:52 LAX 08:52 JFK 11:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86