怎么克服学习 Go 时的恶心感觉,语法太奇怪了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dhairoot
V2EX    程序员

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

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

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

    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#不服
    Ymk1
        9
    Ymk1  
       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 确实很想知道当时设计这么傻逼的语法初衷是啥
    Ymk1
        13
    Ymk1  
       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 一样的, 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  
    PRO
       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 1: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 )。我还是挺喜欢类型推导的。
    至于放在行尾和新起一行,这一直是一个争端问题,这个完全是个人习惯了。
    rb6221
        62
    rb6221  
       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     Solana     958 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 20:51 PVG 04:51 LAX 12:51 JFK 15:51
    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