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

golang 真的简单嘛

  •  
  •   dadaoqueyi ·
    mytianya · 2020-12-03 19:51:42 +08:00 · 8510 次点击
    这是一个创建于 1485 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了几天的 golang 基础语法,发现确实容易上手。但是当我用 golang 跟 mongodb 进行稍微复杂一点的 CRUD 的时候,我感到了痛苦。

    官方的库文档对一些的查询,映射都要很困难的一点点找,google 、百度都是些过时的文章,或者都是相同的复制粘贴官方的示例。golang 出来这么久了,为啥感觉一些周边资料这么缺乏 。

    相反用 java,springboot 集成 mongodb,都很快的能够开发完成。
    学习 golang 主要是自己的服务器 java 部署程序麻烦、吃内存。
    52 条回复    2020-12-14 12:35:36 +08:00
    darksword21
        1
    darksword21  
       2020-12-03 19:58:01 +08:00   ❤️ 3
    https://go.dev/ 这一个不够用吗? 例子都给你准备好了

    ps:springboot 就 springboot, 别带上 java 也别踩一捧一 🐩️
    mepwang
        2
    mepwang  
       2020-12-03 20:11:55 +08:00 via iPhone
    简洁不简单😂
    rimutuyuan
        3
    rimutuyuan  
       2020-12-03 20:15:01 +08:00
    难的从来不是语法,再复杂的语言写简单的业务都不会太复杂。
    lewinlan
        4
    lewinlan  
       2020-12-03 20:35:37 +08:00 via Android
    有一说一,mongogodrive 确实有点毒……
    INCerry
        5
    INCerry  
       2020-12-03 20:50:55 +08:00
    我感觉 go 语言用来写中间件,云原生基础设置,没很重业务逻辑的组件还好。要是来重新票务这些很重业务逻辑的东西,可能就得多招点人了
    billlee
        6
    billlee  
       2020-12-03 21:17:07 +08:00
    反正需要写的逻辑就在那里,语法简单了,就要写更多代码。我写复杂项目的时候还是喜欢用 C++, Scala 之类的语言。
    sagaxu
        7
    sagaxu  
       2020-12-03 21:18:49 +08:00 via Android
    go 是给你写 infra 的,你非要拿去写 crud,肯定别扭
    no1xsyzy
        8
    no1xsyzy  
       2020-12-03 21:19:10 +08:00
    @rimutuyuan brainf*ck……
    AmrtaShiva
        9
    AmrtaShiva  
       2020-12-03 21:20:13 +08:00 via iPhone
    语法简洁 自由 随性
    namaketa
        10
    namaketa  
       2020-12-03 21:59:19 +08:00   ❤️ 1
    我也感觉到了,这可能是语言本身的简洁,并不能掩盖现实世界逻辑的复杂。

    所以好的生态,会有人根据实际的需求,提炼约定和框架,而 GO 还在生态建设阶段。

    总之,也不是不能用,生态还在艰难建设中就很容易陷入啥都得自己来搭脚手架和不时踩两个坑的窘境。
    littlewing
        11
    littlewing  
       2020-12-03 22:26:44 +08:00 via iPhone
    go 就不是用来写业务的
    raaaaaar
        12
    raaaaaar  
       2020-12-03 22:35:50 +08:00 via Android   ❤️ 1
    我写了一年多了,感觉到要学的太多。只是 go 的语法特性很多都不会用,更别说那些硬性知识了,楼上说的对,难得从来都不是语法本身。
    Hanggi
        13
    Hanggi  
       2020-12-03 23:35:16 +08:00
    jb 统计 go 语言开发者中,36% 在做网站开发,31% 在做各类中间件小型程序,26% 在做 infra 。
    当然这个百分有重叠的部分。
    kidlj
        14
    kidlj  
       2020-12-03 23:48:15 +08:00 via iPhone   ❤️ 1
    又有人说 Go 不适合写业务,我倒看到 ent 的 issue 里有人问能不能把它移植到 Java 。
    no1xsyzy
        15
    no1xsyzy  
       2020-12-03 23:53:31 +08:00   ❤️ 1
    前段时间阮一峰推荐了一篇文章比较 rust 和 go 的,其实把 go 的优劣势讲得很清楚了

    1. 标准库很强
    2. 因此自己实现一个轮子很简单( trivial )
    3. 因此现成的别人分享的轮子很少,因为这个轮子放出来也太简单了,警惕 npm 一行代码一个包

    前段时间不是有人问 Web 框架么,结果好几个推荐直接用标准库撸的……
    xiangwan
        16
    xiangwan  
       2020-12-04 00:46:12 +08:00 via Android
    golang 语法简单,库也简单,所以开发起来比较麻烦,要什么没什么。
    spring 要什么有什么,因为复杂,所以难。
    难的层面不一样
    smallX
        17
    smallX  
       2020-12-04 08:39:46 +08:00
    简约而不简单。
    没那么多套路,直接用起。
    Dogtler
        18
    Dogtler  
       2020-12-04 08:48:22 +08:00 via Android
    面向 c 出身的应该简单,对其他语言或入门选这个有点困惑
    user0
        19
    user0  
       2020-12-04 09:12:12 +08:00 via Android
    嵌入式 Linux 程序员学了一下 Go,感觉像找到了组织
    vultr
        20
    vultr  
       2020-12-04 09:12:50 +08:00
    看看这个: https://github.com/webpkg/api

    你要的基本上都有了。
    vultr
        21
    vultr  
       2020-12-04 09:14:29 +08:00
    搞错了,你用 mongodb,上一条发的用的是 mysql.
    Dganzh
        22
    Dganzh  
       2020-12-04 09:50:37 +08:00   ❤️ 1
    唉,go 写 crud 确实很恶心
    lwch
        23
    lwch  
       2020-12-04 09:56:33 +08:00
    go 写 http 程序是真的爽几行代码就能处理 request 了,换做是 C++搭个框架一天过去了
    fo0o7hU2tr6v6TCe
        24
    fo0o7hU2tr6v6TCe  
       2020-12-04 10:03:03 +08:00
    借坑,求一个练手的项目
    感觉最近有关注到好几个语言,最后都是语法会了,不知道拿什么项目练手

    当然除了 web 框架外哈,感觉 go 的 web 框架只是冰山一角,应该还有很多东西可以学,有点摸不着头脑
    dadaoqueyi
        25
    dadaoqueyi  
    OP
       2020-12-04 10:10:48 +08:00
    @lwch 确实,有些时候很方便,写些简单的命令行工具。
    zmqiang
        26
    zmqiang  
       2020-12-04 10:15:08 +08:00
    go 简单但是有些时候开发起来烦,但我还挺喜欢的。我不喜欢 java 生态里,很多包封装连亲妈都不认识了。比如你引入 readis 的 client,你看 redis 的官网文档是没有什么用处,你的看 client 的文档才会用。永远都蒙着一层纱的感觉,换个 client 可能一切都要重来。
    jswh
        27
    jswh  
       2020-12-04 10:16:45 +08:00
    多了不少库和语法糖的 C
    geekzhu
        28
    geekzhu  
       2020-12-04 10:44:07 +08:00
    只说写代码而言,这个时候就想到了 PHP 的好
    libook
        29
    libook  
       2020-12-04 11:57:46 +08:00
    Go 的简单在于一种功能往往只有一种实现方式,可以将更多的经历放在业务上,而不是思考各种实现方案上,团队中有技术很烂的人也不至于写出太烂的代码。所以目前看来是比较适合企业团队生产的。

    Go 出来这么多年,初期几年人们大多都在喊口号,说 Go 怎么怎么好,但真正学了、用起来的很少,也就是最近三年才有越来越的的企业项目用起来。新语言肯定不如老语言资料和轮子那么多、全,这方面 Java 几乎是无敌的,毕竟沉淀了二十多年了。用新技术你就只能多看官方文档、多提问、多看源码。

    具体遇到了什么问题可以发出来让大家帮忙解决,只是抱怨的话不会有任何积极意义。

    话说回来,用了很多年 Node.js ,因为都是 JS 技术栈的,所以对接前端、对接 MongoDB 都很顺滑,性能多数情况下表现也不错。现在微服务大行其道,一个项目也不一定完全使用一种语言来开发。

    Java 项目部署普遍比较麻烦,容器是解决这方面问题的一个有效方案(简直为 Java 栈量身打造)。
    JackyCDK
        30
    JackyCDK  
       2020-12-04 14:08:35 +08:00
    mongogodirver 确实难用,用 mgo 吧
    EKkoGG
        31
    EKkoGG  
       2020-12-04 14:18:15 +08:00
    你这种需求用 .net core 不是很好吗~
    TypeError
        32
    TypeError  
       2020-12-04 14:19:12 +08:00
    我倒是讨厌 Java 老的那一堆
    什么 ee 、xml
    GrayXu
        33
    GrayXu  
       2020-12-04 14:33:16 +08:00
    Go 的简单在于多线程开发的控制方便…
    4771314
        34
    4771314  
       2020-12-04 14:38:08 +08:00
    go 的库文档看起来很详细,但是有很多都没有细致的说明,很多的 interface,有时候感觉在看 js
    songjiaxin2008
        35
    songjiaxin2008  
       2020-12-04 14:42:58 +08:00
    坚持,多写多练习,多看别人的代码怎么组织的,使用 2 年已经感觉渐入佳境。
    lwch
        36
    lwch  
       2020-12-04 14:54:55 +08:00
    @dadaoqueyi 不仅仅是命令行工具,我司的整套推荐系统都是 go 的
    wellhome
        37
    wellhome  
       2020-12-04 14:57:05 +08:00
    @libook java 不是一个 jar 包 就搞定?
    而且 jvm 本身就是虚拟机了, 为什么外面在套一层容器? 我一直百思不得其解。
    libook
        38
    libook  
       2020-12-04 17:38:11 +08:00
    @wellhome 看项目情况吧,能打成 1 个仅依赖 JRE 的 Jar 部署就很简单;但是如果因为某些需求不能打成一个 Jar,以及涉及到复杂的环境配置,部署难度就有可能比较高。
    传统的运维架构能满足需求的话可以不用容器,如果希望使用云原生带来一些好处的话(比如时效和成本),就可能得用容器。

    比如 Go 完全可以编译成一个可执行文件,但如果希望使用云原生的方案来满足集群访问控制、优雅升降级、容灾等需求就还是得套个容器,因为云原生设施管理服务的最小单位就是容器。

    如果对容器没有需求的话,就没必要用。
    hakono
        39
    hakono  
       2020-12-04 17:59:05 +08:00 via Android   ❤️ 3
    路过吐槽下,ls 一堆人不看帖子就强答也是醉了

    lz 吐槽的分明是 go 语言里一堆包不好好写文档,想完成一个功能查文档查到怀疑人生。功能用法写得不详细,该写的功能不写到文档里,文档里没多少有用信息,一些用法功能不去搜项目的 issue 你根本就不会知道

    这个真是 go 语言很多包的一大问题,一批评就动不动说你不会去看源码?
    index90
        40
    index90  
       2020-12-04 19:32:52 +08:00
    好的文档是昂贵的,Golang 生态和用户体量没法跟 Java 比,换你自己是 mongodb 的老板,你会在 golang 上投入跟 java 等量的资源吗?
    而且 mongodb golang 的 driver 我也用过,没有你说的那么不堪,如果你能熟练看懂英文文档的话。
    https://godoc.org/go.mongodb.org/mongo-driver/mongo
    大部分方法都有 example
    narmgalaxy
        41
    narmgalaxy  
       2020-12-04 21:09:48 +08:00
    问我问我,我用 mongogodriver 好长时间了,基本的坑也踩过了
    SignLeung
        42
    SignLeung  
       2020-12-04 23:59:18 +08:00
    @narmgalaxy countDocument()这个方法怎么用才不会卡,用聚合实现 count,真的难受
    FrankAdler
        43
    FrankAdler  
       2020-12-05 00:05:50 +08:00
    有些没文档,但是有写测试。。。也能从里面找到实例
    ijrou
        44
    ijrou  
       2020-12-05 00:13:56 +08:00
    不要一上来就问简不简单。。。。。
    lookenwu
        45
    lookenwu  
       2020-12-05 10:21:48 +08:00
    如果你喜欢 C,你一定会喜欢 Go
    narmgalaxy
        46
    narmgalaxy  
       2020-12-05 10:54:26 +08:00
    @SignLeung 不清楚你说的卡是指什么.可以给个例子吗
    kevinwan
        47
    kevinwan  
       2020-12-05 12:35:23 +08:00 via iPhone
    确实是很方便的,我们团队内部基于 go-zero 开发,基本上可以专注于业务代码开发,而无需关注服务治理和缓存等
    pursuer
        48
    pursuer  
       2020-12-05 13:13:31 +08:00 via Android
    @lookenwu 这,我觉得 c 不错,但是我对 go 不感冒啊
    LinsVert
        49
    LinsVert  
       2020-12-05 14:32:01 +08:00
    @hzjseasea 可以写个内网穿透的小工具
    snowhunter
        50
    snowhunter  
       2020-12-09 15:58:52 +08:00
    数据库和语言选择也有一定的关系,mongo 还是适合配 node
    wellhome
        51
    wellhome  
       2020-12-12 22:09:02 +08:00
    @libook 复杂的环境配置可否举一个例子?配置是否可以打包到 jar 里?
    libook
        52
    libook  
       2020-12-14 12:35:36 +08:00
    @wellhome 这个不同项目都会有不同的情况,比如需要热插拔一些 Jar 依赖包,或者依赖一些系统动态链接库,再者就是需要特殊的定制的 JVM 和启动参数来运行 Jar 包,还有日志采集、性能监控、持续部署工具……不清楚是否都能打包到一个 Jar 里。

    容器是一个工具,工具是为需求服务的,有需求就可以考虑用,没有需求就没必要用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2094 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:23 · PVG 08:23 · LAX 16:23 · JFK 19:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.