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 · 9865 次点击
    这是一个创建于 2085 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学 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 有点略多,新手有点懵
    halo117
        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 开发的多。
    kios
        36
    kios  
       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   ·   实用小工具   ·   1712 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:18 · PVG 00:18 · LAX 08:18 · JFK 11:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.