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

怎么克服学习 Go 时的恶心感觉,语法太奇怪了

  •  
  •   dhairoot · 2019-10-09 15:21:03 +08:00 · 32682 次点击
    这是一个创建于 1876 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用大家都熟悉的规则设计语法多好,为什么非要高一些乱七八糟的语法.

    278 条回复    2024-08-27 17:21:54 +08:00
    1  2  3  
    imzxk
        1
    imzxk  
       2019-10-09 15:25:01 +08:00   ❤️ 4
    php 解决一切
    janxin
        2
    janxin  
       2019-10-09 15:25:39 +08:00
    欢迎使用世界上最好的语言 Java
    sadfQED2
        3
    sadfQED2  
       2019-10-09 15:26:13 +08:00
    php 是世界上最
    cjpjxjx
        4
    cjpjxjx  
       2019-10-09 15:27:39 +08:00
    人生苦短,我用 Python
    dhairoot
        5
    dhairoot  
    OP
       2019-10-09 15:29:09 +08:00   ❤️ 2
    @janxin 我会 Java,但是工作需要所以学习 Go,感觉 Go 也太奇葩了,为啥在国内一些大公司还愿意用这种语言.包管理都没一个成熟方案.访问控制用大小写控制.搞一堆没用的改变,就是为了标新立异吗.现在真的觉得 Java 优雅无比,所以学习 Go 的过程感觉被恶心的不行.是不是我太偏激了
    optional
        6
    optional  
       2019-10-09 15:30:43 +08:00
    约定大于配置蛮好的,java 写多了就不自觉想造轮子
    dhairoot
        7
    dhairoot  
    OP
       2019-10-09 15:31:44 +08:00   ❤️ 1
    @optional Go 也要造一堆轮子呀
    vone
        8
    vone  
       2019-10-09 15:31:58 +08:00   ❤️ 4
    @dhairoot c#不服
    laragh
        9
    laragh  
       2019-10-09 15:32:34 +08:00
    PHP 解决一切。但是既然要学,难道不应该去了解语法设计的初衷么?
    JeromeCui
        10
    JeromeCui  
       2019-10-09 15:32:39 +08:00 via Android
    习惯了就好
    reus
        11
    reus  
       2019-10-09 15:34:28 +08:00   ❤️ 20
    你这个“大家”,包括懂 C++的吗?包括懂 Haskell 的吗?
    你不熟悉,就说你不熟悉就好,别以为你能代表大家。
    觉得乱七八糟就不要学,不要用,没有人委屈你用。
    要么忍,要么滚,这里同样适用。
    dhairoot
        12
    dhairoot  
    OP
       2019-10-09 15:34:52 +08:00
    @laragh 确实很想知道当时设计这么傻逼的语法初衷是啥
    laragh
        13
    laragh  
       2019-10-09 15:36:07 +08:00
    @dhairoot 可以开发一个语言也行呀~
    dhairoot
        14
    dhairoot  
    OP
       2019-10-09 15:37:18 +08:00
    @reus C++的语法也挺好的呀,而且我是来求教的.不是语言狂热份子.
    Vegetable
        15
    Vegetable  
       2019-10-09 15:38:25 +08:00   ❤️ 2
    学习一门语言的时候心存敬畏,不要上来就评价好不好,有自己的喜好很正常,但也要真的了解之后再去评价不是吗。不喜欢 go 的人很多,但主观的恶心是不应该存在的。他的确有他的优势的,语法我没搞清楚哪里乱七八糟了,相比起来 go 的规则是很少了吧
    whileFalse
        16
    whileFalse  
       2019-10-09 15:38:49 +08:00
    不爽不要用。
    jessun1990
        17
    jessun1990  
       2019-10-09 15:39:54 +08:00
    我在接触 go 以前,只有 python 和简单 js 的语法经验。我觉得 go 的语言还是比较简洁的。
    当然,我十分无比怀念 python 下的列表生成式。
    HolmLoh
        18
    HolmLoh  
       2019-10-09 15:40:57 +08:00   ❤️ 1
    或许标新立异是为了更高的关注度?如果跟其他所有的语言一样估计关注的人没那么多吧,或许是有人喜欢这种奇怪的语法,才能让他在某个圈子里面大受欢迎,反正我是写的不习惯的,学完最后还是发现 java 更适合我一点
    hhyvs111
        19
    hhyvs111  
       2019-10-09 15:41:04 +08:00
    go 挺好用的,c++表示一下就能转变过来
    dhairoot
        20
    dhairoot  
    OP
       2019-10-09 15:41:43 +08:00   ❤️ 1
    @reus 就和你评价 vscode 一样的, https://www.v2ex.com/t/607412#reply7
    dhairoot
        21
    dhairoot  
    OP
       2019-10-09 15:42:08 +08:00
    @HolmLoh 你说的有道理
    gramyang
        22
    gramyang  
       2019-10-09 15:46:33 +08:00   ❤️ 1
    一点都不恶心,一点都不乱,非常简洁,比 java 好用,和 java 有细微的不同。
    当然了,go 的包管理确实是屎,必须要上 mod 才能用。
    misaka19000
        23
    misaka19000  
       2019-10-09 15:46:34 +08:00   ❤️ 1
    @dhairoot #4 是的,是你太偏激了
    dhairoot
        24
    dhairoot  
    OP
       2019-10-09 15:46:39 +08:00
    @hhyvs111 看来 Go 设计的目的是从 C++这边拉用户,Java 这边完全不感冒
    sls
        25
    sls  
       2019-10-09 15:47:07 +08:00
    go 和 java 是两个极端,我就喜欢 go,写不了 java,觉得 java 太麻烦了
    aydd2004
        26
    aydd2004  
       2019-10-09 15:51:28 +08:00
    看来 我要去摸一下 go 了 哼哼
    xxxcat
        27
    xxxcat  
       2019-10-09 15:52:51 +08:00
    其实就是下意识抗拒不想学而已,跟什么语言关系不大,曾经我被迫从 C#转学 PHP 也是这个心理
    amazingrise
        28
    amazingrise  
       2019-10-09 15:53:27 +08:00 via Android
    有一说一,Go 有些地方比 Java 简洁了一些。Go 这玩意更像 C 风格
    dhairoot
        29
    dhairoot  
    OP
       2019-10-09 15:54:36 +08:00
    @xxxcat 可能吧,但是我学 Python 和 C++还挺适应的,Go 的感觉确实不太好.
    yiplee
        30
    yiplee  
       2019-10-09 15:54:50 +08:00
    Go 开发很多都是从 Java 转过来的
    dhairoot
        31
    dhairoot  
    OP
       2019-10-09 15:58:01 +08:00
    @aydd2004 要顶住,跨过了这个坎可能就好了
    caviar
        32
    caviar  
       2019-10-09 15:58:02 +08:00 via Android
    跟 OCaml/Haskell 比..我觉得 imperative 语言语法都差不多... 其实好像不管什么语言,刚换语言时都会有点恶心的感觉,大概是走出了舒适区的缘故吧,多写写就好了...
    doudou1523102
        33
    doudou1523102  
       2019-10-09 16:00:33 +08:00
    语言特性不同吧,支持高并发
    dhairoot
        34
    dhairoot  
    OP
       2019-10-09 16:01:28 +08:00
    @caviar Maybe
    Tyanboot
        35
    Tyanboot  
       2019-10-09 16:03:47 +08:00   ❤️ 5
    每次见到有人说写 C/C++的能很快的就接受 Go, 或者说入门 Go 的时候, 我就会觉得很奇怪, 我就是因为写多了 C/C++所以才死活无法接受 Go 的反人类反直觉写法.
    araraloren
        36
    araraloren  
       2019-10-09 16:07:03 +08:00
    go 的发明者已经不允许你们使用了,还是早点找个别的语言吧。
    xxxcat
        37
    xxxcat  
       2019-10-09 16:07:28 +08:00
    @dhairoot 可能与个人关注点有关吧,目前为止我也没找到自己完全满意的语言,但只要符合需求就会抛开个人品味,而且有时候过段时间发现其实是自己的眼界太窄
    Junh
        38
    Junh  
       2019-10-09 16:07:30 +08:00 via iPhone
    只要能用 JavaScript 实现的,最后都会用 J
    whitehack
        39
    whitehack  
       2019-10-09 16:13:35 +08:00   ❤️ 1
    你要是去学一下 rust 是不是就不是恶心而是直接倒地死亡了?
    WUWENZE
        40
    WUWENZE  
       2019-10-09 16:14:53 +08:00
    为自己的 Go 配置一份专属字体,想象自己已经融入了这个社区
    https://img01.sogoucdn.com/app/a/100520146/d64a45561432a0e28d1cbac0229f203c
    官方地址: https://blog.golang.org/go-fonts
    missqso
        41
    missqso  
       2019-10-09 16:15:52 +08:00 via iPhone
    桌下放个垃圾桶🗑
    wysnylc
        42
    wysnylc  
       2019-10-09 16:18:21 +08:00   ❤️ 1
    写 py 的接受不了 java
    但是写 java 的可以兼容 py 只是觉得很奇怪
    怎么说呢,由俭入奢易由奢入俭难,py 所谓的"自由"是放弃严谨带来的
    anonymous256
        43
    anonymous256  
       2019-10-09 16:18:46 +08:00   ❤️ 1
    1. 变量声明的顺序, C/C++风格, 先类型,后变量名, go 是反的.
    2. go 的花括号强制从行末开始, 并且不能换行.

    就这 2 点, 我也觉得 go 的语法反人类的. 根本原因是: 大多数人的大学课程都有 C 语言, C 语言应该也是大多数程序员的第一门编程语言, 它的风格潜移默化的影响. 难免会觉得 go 真的反人类.

    http://www.yinwang.org/blog-cn/2014/04/18/golang 王垠对 Go 语言的综合评价, 有一部分就很客观
    tt67wq
        44
    tt67wq  
       2019-10-09 16:20:15 +08:00
    那你可以去学一下 erlang 的语法,然后你就升天了
    linxl
        45
    linxl  
       2019-10-09 16:21:17 +08:00
    难受中...
    ipwx
        46
    ipwx  
       2019-10-09 16:21:48 +08:00 via Android   ❤️ 1
    我同意 @Tyanboot。我 c++ 用的还挺爽的,正因此觉得 go 语法不太能接受
    VDimos
        47
    VDimos  
       2019-10-09 16:22:01 +08:00 via Android
    @whitehack rust 语法上没有什么奇怪的地方吧
    OhYee
        48
    OhYee  
       2019-10-09 16:22:43 +08:00
    其实写习惯就好了……
    虽然我也觉得类型放后面很蠢,但是我现在已经习惯到写 C 的时候也放后面的状态……

    emmm 多语言混着写容易精分
    StarUDream
        49
    StarUDream  
       2019-10-09 16:23:18 +08:00
    习惯了,用着挺舒服的。。
    justin2018
        50
    justin2018  
       2019-10-09 16:28:03 +08:00
    习惯 ta 你就爱上了 ta 😁
    allenhu
        51
    allenhu  
       2019-10-09 16:29:06 +08:00 via Android
    @Tyanboot 我也不明白,c++哪里像 go 了
    allenhu
        52
    allenhu  
       2019-10-09 16:31:44 +08:00 via Android   ❤️ 1
    go 的语法,某种程度上可以说是为了与众不同而与众不同,真没那个必要,采用普世的语法完全无影响。但是它非要倒着写,哈哈
    xiaoxinxiaobai
        53
    xiaoxinxiaobai  
       2019-10-09 16:32:26 +08:00 via Android
    写就完事了,写多了就好了,不是拿来写的吗
    justfun
        54
    justfun  
       2019-10-09 16:33:25 +08:00
    @sadfQED2 #3 看来是没说完就被打死了😂
    dinjufen
        55
    dinjufen  
       2019-10-09 16:36:23 +08:00
    我也觉得语法和老牌语言 C、C++、Java 等差别较大,可能是习惯的原因吧
    GPIO
        56
    GPIO  
       2019-10-09 16:37:06 +08:00
    正好最近在学 Go,我就来说一下我无法忍受的几点吧。
    1.强制定义{}需要换行,却又允许使用不同风格的写法定义变量,自相矛盾;
    2.select case switch case 是完全不同的模型却用同一个关键字;
    3.array 定义成值类型,slice 定义成引用类型,底层引用 array,但是 slice 扩容会导致内存再分配指针失效的问题,试图隐藏指针然而这是不可能的;
    4.裸返回这种东西就不应该存在。
    以上,来自一个 Go 新手的吐槽。
    AlisaDestiny
        57
    AlisaDestiny  
       2019-10-09 16:37:35 +08:00
    如果你和 C 比就会觉得写 GO 太舒服了。
    gamexg
        58
    gamexg  
       2019-10-09 16:37:52 +08:00
    @OhYee #48
    @anonymous256 #43

    我觉得先打变量名,后输入类型更方便些。
    个人习惯,声明变量时,大脑先想的变量用途,即名字,后考虑具体类型,写 c 时觉得有些反思维。

    不过对于大括号在行尾非常不习惯,对 go 的 error 未学习前也是很反感。最初就因为这两点不想学习 go 语言。

    现在对于行末的 { 被强迫适应了。
    a591826944
        59
    a591826944  
       2019-10-09 16:38:37 +08:00
    要有开放的心态
    kasumigaoka
        60
    kasumigaoka  
       2019-10-09 16:39:05 +08:00
    @allenhu 也不是说为了与众不同吧 Go 独特的类型声明语法确实在某些程度上带来了一些便利( https://blog.golang.org/gos-declaration-syntax
    janxin
        61
    janxin  
       2019-10-09 16:43:57 +08:00
    @anonymous256 变量类型后置主要是更易理解,后置也方便类型推导(比如直接 var )。我还是挺喜欢类型推导的。
    至于放在行尾和新起一行,这一直是一个争端问题,这个完全是个人习惯了。
    janus77
        62
    janus77  
       2019-10-09 16:45:20 +08:00   ❤️ 1
    go 的强制性规定好像比 java 这类守序静态语言更严格:
    我第一天学 go 的时候发现一个规定:不用的包竟然不能 import 进去
    这种毫无卵用甚至有副作用的规定挺多的,也不知道怎么说他才好
    janxin
        63
    janxin  
       2019-10-09 16:45:58 +08:00
    @araraloren 中美正在进行战争,你要使用任何来自美国的编程语言都是不爱国!未来一定是属于易语言的!

    附议:使用英文也是不爱国的表现
    cookey39
        64
    cookey39  
       2019-10-09 16:46:42 +08:00 via Android
    rust,请
    damngood
        65
    damngood  
       2019-10-09 16:48:21 +08:00
    一直用还好, 如果和别的你更喜欢的语言交替用话, 那确实会嫌弃.
    我就是属于这个情况, 所以打算用另外一个语言来一统了...
    dhairoot
        66
    dhairoot  
    OP
       2019-10-09 16:48:51 +08:00
    @Tyanboot 感觉一门语言的羽凡一定要简单,常用,这样才能更快的被人接受
    tairan2006
        67
    tairan2006  
       2019-10-09 16:48:54 +08:00
    只能说你写的语言太少了,我觉得都还好
    dhairoot
        68
    dhairoot  
    OP
       2019-10-09 16:49:11 +08:00
    @dhairoot 语法
    dhairoot
        69
    dhairoot  
    OP
       2019-10-09 16:51:11 +08:00
    @allenhu 不能同意更多
    xuanbg
        70
    xuanbg  
       2019-10-09 16:52:56 +08:00   ❤️ 2
    习惯就好


    我也不喜欢 go 这种反直觉的语法,Java 语法中规中矩,说不上好也说不上坏,也许可以说比较傻。

    然后,语法优雅的 C#你们不是都很鄙视么┑( ̄Д  ̄)┍
    TypeErrorNone
        71
    TypeErrorNone  
       2019-10-09 16:53:18 +08:00
    放弃
    araraloren
        72
    araraloren  
       2019-10-09 16:54:27 +08:00
    @janxin
    人家已经说了 让你们用不了 go 和 python,好自为之。。
    说不定 哪天用 go 的都逮起来了。。
    lower
        73
    lower  
       2019-10-09 16:56:38 +08:00
    反正语言也是开源的,用的不爽了就提 pr 啊……
    GPLer
        74
    GPLer  
       2019-10-09 17:00:06 +08:00 via Android
    {本来就应该在行末,看着直观,浑然一体。
    araraloren
        75
    araraloren  
       2019-10-09 17:00:53 +08:00
    @lower 你这个想法一点也不对,语言虽然是开源的,但是有 维护者 设计者 作者 等等。。
    PR 能被合并才叫 PR。。
    很多语言基本上是那么几个人说了算、
    dhairoot
        76
    dhairoot  
    OP
       2019-10-09 17:01:26 +08:00
    @janus77 实在搞不懂就这样为啥还俘获那么多脑残粉
    SeaRecluse
        77
    SeaRecluse  
       2019-10-09 17:06:10 +08:00   ❤️ 1
    C#欢迎你,扶我起来,我还能吹
    cryring
        78
    cryring  
       2019-10-09 17:06:52 +08:00
    C++/C 过来的表示 go 用着很舒服
    ChristopherWu
        79
    ChristopherWu  
       2019-10-09 17:08:46 +08:00
    国王的新衣
    go 粉的优雅

    GET,预计一堆黑 lz 的(还有我)
    stevenbipt
        80
    stevenbipt  
       2019-10-09 17:14:08 +08:00
    用 go 的设计哲学思想来写代码~,虽然我到现在也感觉不太爽,但是用 go 的设计哲理的思考方法来写代码感觉还行
    janxin
        81
    janxin  
       2019-10-09 17:15:01 +08:00   ❤️ 2
    @araraloren 那个时候你们这些用敌国语言的一个也跑不掉 2333
    salamanderMH
        82
    salamanderMH  
       2019-10-09 17:20:28 +08:00
    还好吧
    jeremaihloo
        83
    jeremaihloo  
       2019-10-09 17:20:52 +08:00
    @dhairoot #5 C#语法比 Java 优雅太多,我写惯了 C#,突然让我去写 Java,我恶心的不行,但是也是没办法,毕竟谁流行用谁嘛
    icexin
        84
    icexin  
       2019-10-09 17:21:32 +08:00
    @janus77 go 的设计目标里面有快速编译,而没用的 import 会拖慢编译速度,代码越多影响就越大。详细看看官方的解释 https://golang.org/doc/faq#unused_variables_and_imports
    cfcfcfcf
        85
    cfcfcfcf  
       2019-10-09 17:25:43 +08:00
    @Tyanboot 1111
    ChristopherWu
        86
    ChristopherWu  
       2019-10-09 17:29:15 +08:00
    @stevenbipt #79 go 的设计哲学有什么啊?我印象中是没有的- = -
    ChristopherWu
        87
    ChristopherWu  
       2019-10-09 17:29:55 +08:00
    @lower #72
    >反正语言也是开源的,用的不爽了就提 pr 啊……
    以后你就感觉到,开源大多都是:

    你尽管提 PR,接受了算我输.jpg
    ChristopherWu
        88
    ChristopherWu  
       2019-10-09 17:30:41 +08:00
    @tt67wq #43 黑 erlang 语法没问题的。但是 erlang 现在打了新补丁了,Elixir。你看他的语法,就美滋滋了
    ChristopherWu
        89
    ChristopherWu  
       2019-10-09 17:31:45 +08:00
    @anonymous256 #42 你黑的这两点不行,这两点没什么的。
    jon
        90
    jon  
       2019-10-09 17:33:44 +08:00 via Android
    lz 为啥要学 go
    janxin
        91
    janxin  
       2019-10-09 17:34:41 +08:00
    @ChristopherWu 没办法,所有的项目管理者都是独裁者,为什么我的建议你就是不接受呢

    github.com/textmate/textmate/pull/37
    ChristopherWu
        92
    ChristopherWu  
       2019-10-09 17:35:38 +08:00   ❤️ 1
    @GPIO #55

    正好最近在学 Go,我就来说一下我无法忍受的几点吧。
    》 1. 强制定义 {} 需要换行,却又允许使用不同风格的写法定义变量,自相矛盾;
    变量命名钦定了用 驼峰 了啊。

    》 2.select case switch case 是完全不同的模型却用同一个关键字;
    这点在点上,同理还有 for
    ChristopherWu
        93
    ChristopherWu  
       2019-10-09 17:38:48 +08:00
    @janxin #90 我在想哦,民主社会为啥不搞个 投票接受 PR
    qiuyi116
        94
    qiuyi116  
       2019-10-09 17:39:10 +08:00 via Android   ❤️ 1
    我跟 lz 有相似的体验。Go 竟然号称是更好的 C,在语法上为何不跟 C 保持一致,而要去搞一些标新立异,我是一直没太理解。最难受的就是类型反正放,对长期写 C 系语言的人来说有点难受。当然,写多了也就习惯了。
    maomaomao001
        95
    maomaomao001  
       2019-10-09 17:39:47 +08:00
    你应该看看 clojure ( Lisp )
    然后回来再学 go, 就会觉得这语法优雅的让人窒息
    zaul
        96
    zaul  
       2019-10-09 17:43:27 +08:00
    Ruby 来一发?
    aa81425600
        97
    aa81425600  
       2019-10-09 17:44:42 +08:00   ❤️ 2
    从 php 转 go 写结构体给恶心坏了。。。。
    janxin
        98
    janxin  
       2019-10-09 17:44:46 +08:00
    @qiuyi116 你需要的已经有了,C++
    zealinux
        99
    zealinux  
       2019-10-09 17:46:20 +08:00
    @janus77
    不用的 package 不能 import 进来,
    个人感觉是 go 语言最大的有优点,
    能控制编译后的目标文件的大小。
    ChristopherWu
        100
    ChristopherWu  
       2019-10-09 17:47:10 +08:00
    请各位评论的黑到点上
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1082 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:22 · PVG 03:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.