• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dhairoot
V2EX  ›  程序员

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

  •  
  •   dhairoot · Oct 9, 2019 · 36855 views
    This topic created in 2586 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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


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

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

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

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

    github.com/textmate/textmate/pull/37
    huoru
    huoru
    Oct 9, 2019❤️1
    92
    @GPIO #55

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

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