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

我怎么感觉 Golang 并不简单,也很复杂

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

    最近实在顶不住 go 的各种宣传诱惑,准备学下 go

    我根据 go 的官网( https://tour.go-zh.org/welcome/1 )过了一遍 go 的语法。

    第一感受就是 go 并不是网上说的那种极简、什么大道至简。不知道是不是因为一直被宣传成 go 简单,让我潜意识觉得,就是比 python 更简单才叫简单。

    下面我说说我觉得很复杂的点:

    1. 指针、函数指针(闭包)等等各种指针用法
    2. interface 用法。

    这两个东西组合起来,写出来的代码可以极其复杂。(感觉都能赶上以前看的那种 C 语言混乱代码大赛了)。

    然后我感觉好的点:

    1. defer
    2. 并发编程和同步,就是被吹爆的 go 协程
    3. 没有 while 关键字了,都用 for 来搞定,也算变相提升了 for 复杂性。

    感觉要学好 go ,写出能和人协作给人看的代码,而不是自嗨的代码,也不是一件很容易的事。也许相对 c/c++,要容易点,但也并不是什么有手就行的极简,完全就是忽悠啊。

    71 条回复    2023-01-01 16:27:39 +08:00
    cmhonker
        1
    cmhonker  
       81 天前   ❤️ 1
    没有时代的语言,只有语言的时代。

    Go 赶上了云计算、弹性计算、容器、超大规模虚拟化、调度等
    Go 适合 C 、C++ / Python 转来的。
    zhangtest
        2
    zhangtest  
       81 天前   ❤️ 3
    java:你是不是对复杂有什么误解?
    BugCry
        3
    BugCry  
       81 天前 via Android   ❤️ 1
    易语言就很简单了,那才叫有手就行
    k9982874
        4
    k9982874  
       81 天前 via Android   ❤️ 2
    你去看看 js ,能把标准搞明白就不错了
    zhengjianyang
        5
    zhengjianyang  
       81 天前   ❤️ 1
    python 转过来的、感觉挺好的
    musi
        6
    musi  
       81 天前
    @k9982874 #4 浏览器:就算你把标准搞明白了,也不见得我就要按照标准来 (狗头
    346673164
        7
    346673164  
       81 天前
    @zhangtest java,因为需求写过一点 go 。其实个人感觉
    java 有一套框框,所有的都要求面向对象,所以很复杂,一个简单的东西需要做的“臃肿”(个人感觉用 go 实现,小且快很方便)
    但是大一点的项目,感觉用 go 少了框框,比如接口实现什么的,多人协作没有统一的约定的话 反而会很杂乱。
    刚刚写了一点 go ,个人不成熟的一些感受。 还有一点,go 写出来的 不需要想 java 一样 一堆 jar 包和依赖,真的很清爽
    hahadaxigua834
        8
    hahadaxigua834  
       81 天前
    go 的简单是因为他 code style 吧,做啥操作都只有几个固定写法,所以所有人写的都大差不差。

    python 的简单是他的对外接口简单,语言本身封装了很多操作。

    如果用 bnf 写他们的语法,python 的长度应该起码是 10 倍的 go 吧
    tairan2006
        9
    tairan2006  
       81 天前   ❤️ 4
    这有啥复杂的,要不你看看 rust
    Mexion
        10
    Mexion  
       81 天前
    go 确实简单,语法简单,但是东西太少,写起来很啰嗦
    securityCoding
        11
    securityCoding  
       81 天前
    该有的问题协程泄漏、内存泄漏一样都不会少
    anonymous2351d00
        12
    anonymous2351d00  
       81 天前   ❤️ 1
    @k9982874 eslint ,babel ,tslint ,prettier ,less ,scss ,postcss ,webpack ,vite ,rollup ,gulp ,各种 plugins ,各种 loader ,各种 chain ,有时候搭项目,搭着搭着就不知道自己在做什么了(完全投入到一团乱麻里无法自拔)
    anonymous2351d00
        13
    anonymous2351d00  
       81 天前
    @k9982874 什么是 CommonJS ?什么是 UMD ?什么是 ES ?疯了。
    yfwl
        14
    yfwl  
       81 天前
    确实,你说的对,我也是和你一样的感觉,但是我觉得 go.dev 里的包,大多数 99.99%没中文,没示例,完全看不懂。。。
    janxin
        15
    janxin  
       81 天前   ❤️ 5
    Easy to learn, hard to master
    linvaux
        16
    linvaux  
       81 天前
    js 才是魔鬼的语言
    boshok
        17
    boshok  
       81 天前
    借楼请问一下大家,有没有比 go 更容易上手且实用的,对于 coding 新手而言。
    allgy
        18
    allgy  
       81 天前
    RUST:要不来尝尝我编译器的厉害?
    qingo
        19
    qingo  
       81 天前
    以 C 语音为基础,go 的 runtime 绝对比 python 的 runtime 要简单很多,go 是语法简单但是,不等于使用简洁,相对来说,个人感觉 go 到 master 应该比 python 更简单。
    wheeler
        20
    wheeler  
       81 天前 via iPhone
    不比 python 简单吗?!
    Crawping
        21
    Crawping  
       81 天前
    一般咱么说一个 语言简单 并不是只是说 语法简单.
    1.语法是否符合直觉,从其他语言转过来亲和力高
    2.常见编程模型非常通用
    3.类库够完全,易用,易管理 (import 一下即可 go get)
    4.语法糖不要太多..免得歧义, 类似 茴字的 N 种写法 就很恶心人
    5.编译部署是否简单.. 包括 交叉编译,跨平台的部署...

    还有好多方面....
    就上面提到的几点...
    作为一个 C/C++开发兼运维 常年配置各种编译环境,各种编译库,各种部署不一致的人来说...
    go 真是 简单到爆炸了...
    iyaozhen
        22
    iyaozhen  
       81 天前
    大道至简 其实有时候是贬义词
    yolee599
        23
    yolee599  
       81 天前
    我一个写 C 觉得 Go 的语法比较松散,像一个脚本语言,喜欢不来
    Seanfuck
        24
    Seanfuck  
       81 天前
    @boshok php ?
    fregie
        25
    fregie  
       81 天前
    interface 才是 golang 最成功的部分,在便准库的指导下,做个比喻,把模块间的组合方式,由拼图变成了积木.
    拼图是必须要两块要完全吻合才能放到一起,基本上一块拼图只能插在固定的另一块上.而积木是,只要你两块长得差不多就拼在一起用.
    当然以上说法仅限于某些好的实践,实际上也存在很多差的实践,甚至某些大的主流框架这一点做的很差.(既然是积木,为什么要做大的框架呢?)
    Jony4Fun
        26
    Jony4Fun  
       81 天前   ❤️ 3
    the ultimate go -> 最近在看的一个系列视频,感觉很有意思,老外的编程思想以及 go 语言里的一些细节的东西。
    我个人还是比较喜欢 go 的,我感觉 C++,python 就是给人的选择太多了,有时候就导致了混乱。
    yekern
        27
    yekern  
       81 天前
    抛开业务谈语言复杂度都是刷流氓.

    你看哪个语言写 hello world 复杂 都不复杂
    Nazz
        28
    Nazz  
       81 天前
    指针和 interface{}相当简单了, 业务开发用不到 unsafe. channel 稍微复杂点
    yuancoder
        29
    yuancoder  
       81 天前
    go 语法本身很简单,真正掌握 go 要了解一些底层的原理,不然写出的代码都是坑。
    kiripeng
        30
    kiripeng  
       81 天前
    go 基本搞懂指针就大家都差不多了
    openmm
        31
    openmm  
       81 天前
    go 写起来怎么排版我都感觉乱 比 c++还乱 不知道是不是我的问题
    bruce0
        32
    bruce0  
       81 天前   ❤️ 1
    学会用不难, 想要用好 需要一定功力
    PlanZ
        33
    PlanZ  
       81 天前
    必须要用到的时候才学,即便这样,也学不动了。
    fxxkgw
        34
    fxxkgw  
       81 天前
    我写了很多年的 C 和 python 现在接手了 go 项目变看项目变学 感觉 go 的真谈不上简单 比 python 复杂多的
    securityCoding
        35
    securityCoding  
       80 天前 via Android
    @Jony4Fun 这个系列非常非常棒,这老外太有激情了
    GiantHard
        36
    GiantHard  
       80 天前 via Android   ❤️ 2
    @boshok C#
    PTLin
        37
    PTLin  
       80 天前
    看个 tour 肯定简单,但是实际上用的话要记住各种细节,比如什么情况下可以自动进行什么优化,什么用法是常见的语言陷阱,常用的库都是什么,最佳实践是什么,这些加起来好像 go 也没那么简单。
    Kilerd
        38
    Kilerd  
       80 天前
    Rust: 什么? 复杂?
    lepig
        39
    lepig  
       80 天前
    哈哈 同感。 写简单的小应用小工具确实很快很简单
    pengtdyd
        40
    pengtdyd  
       80 天前
    能写出这个标题的人,估计没学过 rust
    webcape233
        41
    webcape233  
       80 天前 via iPhone   ❤️ 1
    @boshok python ,bash (如果你认可的话) js 也简单 ,但是你要是新手又过早去接触前端工程化那些你也会觉得他不简单(语言好理解,工具链复杂得要死
    ahdark
        42
    ahdark  
       80 天前
    说难听点,Go 的很多设计有点反行业,就是和行业普遍认定的标准相违背。
    比如那个泛型,目前我知道的只有 Go 是用 `[T=any]`,别的普遍都是 `<T=any>`。
    还有独特的以文件夹为单位的 package 。我之前需要在 service/payment 写 interface ,然后实现。为了方便就想着给每个 impl 单独开文件夹,即 service/payment/credit 等。问题来了,很多数据定义在 service/payment 里,但 New 函数又要调用 impl ,构成了循环依赖,这个方案就寄了……
    ahdark
        43
    ahdark  
       80 天前
    @Crawping 第四条是不是想骂 Kotlin 和 Rust (
    ysc3839
        44
    ysc3839  
       80 天前 via Android
    个人觉得 Golang 的协程很复杂,个人还是更喜欢 async await 这种协程。
    TWorldIsNButThis
        45
    TWorldIsNButThis  
       80 天前 via iPhone
    @ahdark scala
    gowl
        46
    gowl  
       80 天前   ❤️ 1
    Java is almost perfect; C# is perfect; F# is beyond perfection.
    netabare
        47
    netabare  
       80 天前
    @ahdark 泛型的语法这个反而没那么重要吧……scala 也是用方括号的,我自己构思的语言打算用竖线来分割(

    以文件夹为单位这个设定倒是没听说过别的语言有……听你这么描述,感觉确实是个很坏的,opinionated 到强迫用户照着一种思路去做的设计。
    urnoob
        48
    urnoob  
       80 天前 via Android
    @346673164
    @zhangtest
    二位没理解 JAVA 或者是被各种框架玩出花弄晕了
    JAVA 的世界里做开发 就是类 ,new 出来 调用方法或者静态方法。传递的参数除了基本类型就是引用。内部类 接口 枚举都是可选项。其他基本为了面向对象这个理念做的特性可以抛弃。这种二,三选一的框框让你完全忘掉了 struct union 指针 引用 这里用.那里用-> 要加& 等等细节
    yyf1234
        49
    yyf1234  
       80 天前 via iPhone
    什么样的人才会觉得一门语言简单呢
    wangyu17455
        50
    wangyu17455  
       80 天前
    语法简单可不代表写出来的代码简单,go 要是允许 java/js 那样的 lambda ,代码就会好看很多,但是 go 就是为了语法简单,方法前边必需放上 func 这四个字母,导致 go 版的 lodash 整个就一不伦不类的怪物
    EldersJavas
        51
    EldersJavas  
       80 天前
    没有简单的语言,只有短浅的思想.
    挺搞笑的,每天都在议论一门语言的长短
    管他好坏,能挣钱的语言才是好语言,能创造价值的才是好语言
    每个人对好语言的定义都是不一样的
    因为每个语言给不同人创造的价值是不一样的
    有些人因为会很多语言而沾沾自喜,吹牛逼,
    是因为这些行为能给他带来价值,虚荣心的价值,
    和你们赚的钱是等值的
    简单和难是相对的,需要时间空间的洗礼,
    就像你高中时候学数学想跳楼,等到考研时再看发现自己是沙比一样.
    你说你顶不住 go 的宣传诱惑
    那是 go 给别人创造的价值,别人想让你用他也创造价值,
    你当然可以用 python 创造你的价值,或者其他语言
    我想,假如你学 go 能获得 1 个亿,
    那你肯定不是在抱怨,更别说在这里发帖抱怨了
    就是这样,如果你感觉对你有价值,就学
    没什么换的理由,就用原来的
    每天都在说某某语言很流行,某某语言很挣钱,
    如果他没法给你创造任何价值,
    如果他学习的价值跟创造的价值差的太远,
    那他就是答辩,别学了,还不如睡会觉


    最搞笑的是,连个符号都要分三六九等,长见识了
    iseki
        52
    iseki  
       80 天前 via Android   ❤️ 7
    复杂度不会凭空消失,只会从一种形式转换到另一种形式
    chendl111
        53
    chendl111  
       80 天前   ❤️ 1
    脱离业务谈语言复杂度毫无意义
    seakingii
        54
    seakingii  
       80 天前
    简单不简单,是相对的.
    相对 C,C++,RUST 来说,GO 非常简单.

    另外 GO 的简单,还体现在工具链上.一个 GO 命令完成所有,包括复杂的交叉编译.
    最后还体现在生成物,一个二进制程序随便发布,很少有依赖问题.
    wangritian
        55
    wangritian  
       80 天前
    我对所有语言都没有特别的喜恶,不同项目有不同的最优解,工具罢了,多关注它们的优势和擅长的领域
    wjx0912
        56
    wjx0912  
       80 天前
    如果说 haskell ,rust 是在矿上挖煤; golang 就是在白领在办公室吹空调
    Breacher
        57
    Breacher  
       80 天前 via iPhone
    首份工作是 Android 开发,在公司的内部机会开始 Go 后端开发。做 Android 差不多 3 年还是一名 Java 和 Android 菜鸟,换工作时果断转到 Go 后端,至此头也不回转了 Go ,从未有过使用 Java 工作的想法,除非以后需要开发大数据产品。
    Leviathann
        58
    Leviathann  
       80 天前
    @Breacher
    go 是流水线打螺丝
    haskell 是实验室做实验
    Leviathann
        59
    Leviathann  
       80 天前
    @wjx0912

    @Breacher @点错了
    xsen
        60
    xsen  
       80 天前
    折腾过 C/C++,还有跨平台的,才会真心觉得 Go 是真简单。C/C++一大堆依赖库,若还要支持多平台的话——如 Window/Linux/iOS/Android 诸如此类,是真的会死人的
    zagfai
        61
    zagfai  
       80 天前
    int 不是默认大数系统的都复杂。
    geekzhu
        62
    geekzhu  
       79 天前
    @Jony4Fun #26 699 刀的那个么?
    dog82
        63
    dog82  
       79 天前
    go 有一个非常大的难点:有缓存的 chanel ,你的脑子得像 cpu 一样运行才行
    Aaron7Amelia
        64
    Aaron7Amelia  
       79 天前
    我也觉得,GO 实际上应该对于有 c/c++ 深厚功底的人来说,会比较简单。如果之前只会 Java ,我觉得要真正理解 Go 背后的原理还是需要更多的努力
    Boyce
        65
    Boyce  
       79 天前
    go 的语法,我很喜欢“支持多返回值”,很讨厌“通过大小写来控制访问级别”。
    likunyan
        66
    likunyan  
       79 天前
    现代化的语言,我觉得很不错了。
    maigebaoer
        67
    maigebaoer  
       79 天前 via Android
    @gowl 我最近就在看 F#,确实 beyond perfection
    loloxwg
        68
    loloxwg  
       79 天前 via iPhone
    @tairan2006 rust 一直入不了门
    AItsuki
        69
    AItsuki  
       79 天前 via iPhone   ❤️ 1
    go 的简单在于语法和工具链。另一层面就是特性简单,难听点就是缺失,比如很重要的范型也是最近才补上。另外还有方法重载,异常捕获等……
    但是在并发编程方面我愿称之为最强……
    mayli
        70
    mayli  
       79 天前 via Android
    并行方面…我一个 python asyncio 吊打 go 携程的实现…
    Rooger
        71
    Rooger  
       79 天前
    你对简单的确有误解,没有人规定比 XX 简单就是简单,因为你了解 Python 比较多就用 Python 比较,如果是这样,用 Python 就行啦,干嘛听别人忽悠?所以的东西都是相对而言的,说到底水平不行,看什么都是极其复杂的,语言的底层没有一个是简单的。
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   3169 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 10:55 · PVG 18:55 · LAX 03:55 · JFK 06:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.