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

貌似 Golang 很火,想学一下

  •  
  •   chaomin1014 · 2018-09-10 10:35:53 +08:00 · 18006 次点击
    这是一个创建于 2267 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近看很多公众号什么的在说 Golang 值得一学,有没有技术大佬推荐学 GO 语言的渠道~没学过编程。有什么学习视频或书籍可以介绍吗?谢谢啦~

    140 条回复    2018-09-12 08:55:08 +08:00
    1  2  
    kangkang
        101
    kangkang  
       2018-09-11 10:47:09 +08:00
    @myyou 认真的吗? https://tour.golang.org/moretypes/1 这是官方教程,你看第一句就够了
    kangkang
        102
    kangkang  
       2018-09-11 10:49:38 +08:00
    @myyou 认真的吗? https://tour.golang 点 org/moretypes/1 这是官方教程,你看第一句就够了
    myyou
        103
    myyou  
       2018-09-11 10:52:59 +08:00
    @kangkang 认真的,指针只是个名字,学 golang 没必要再跑的 c 语言那边了解一遍这玩意儿
    specita
        104
    specita  
       2018-09-11 10:54:04 +08:00   ❤️ 1
    如果英文好,去官网上学,都有教程。如果英文吃力,那看中文教程,我一般的方式直接去京东搜名称,然后买销售最好的那一个
    sunzhenyucn
        105
    sunzhenyucn  
       2018-09-11 10:55:55 +08:00
    学 Golang 还得先学 C ?
    瞎扯,那我学 C 之前是不是得先学下汇编?
    学汇编之前是不是得先学会手写 0101 ?
    手写 0101 之前是不是还得先手工造一台计算机出来?
    AppxLite
        106
    AppxLite  
       2018-09-11 11:00:04 +08:00
    讨论半天似乎都没结果,楼主自己看着办吧
    Ediacaran
        107
    Ediacaran  
       2018-09-11 11:09:29 +08:00
    go 是用来写网络服务的 DSL,干别的不太合适
    ryan1991
        108
    ryan1991  
       2018-09-11 11:18:53 +08:00
    郝林的《 Go 并发编程实战》不错,他好像也在极客时间上开专栏了
    SuperMild
        109
    SuperMild  
       2018-09-11 11:23:26 +08:00   ❤️ 1
    @sunzhenyucn 不是说学 Go 要先学 C,而是楼主是零编程基础,对编程毫无概念的状态,入门的第一个语言,Go 不是很合适。

    一般入门编程几条路:从童子功开始练,C 是合适的语言,或者走快速见效的路,Python 之类的合适,或者走培训班面向找工作的路线,Java 入门也行。

    但 Go 入门,如果没有人手把手教,一个编程零基础的人靠自己看书看视频学,怎么看都不是一条好走的路。
    Aoang
        110
    Aoang  
       2018-09-11 11:29:19 +08:00 via Android
    @clino 你钻牛角尖了。

    零基础的人学的是编程,不是语言。
    非要学 Golang 入门,和骑驴找马有什么区别?学会了 Golang 就行了,不用学编程吗?

    你不了解是如何实现的,那你怎么知道该在什么时候用什么比较好?

    切片数组这些都是很基础的东西,什么都不了解,还谈什么把业务逻辑抽象化?

    至于看不看源码,那是你学不学的问题。
    myyou
        111
    myyou  
       2018-09-11 11:32:34 +08:00
    @SuperMild golang 相比 c,java 概念很少,新手最怕被各种概念搞定焦头烂额,我反而觉得很适合零基础的人入门。
    clino
        112
    clino  
       2018-09-11 11:39:53 +08:00
    @Aoang 作为一个初学者,学切片数组会理解会用了就行了,为什么要去学 C 来学切片数组?C 里面又没有切片.

    熟悉了以后要再学为什么这么设计,到底是怎么实现的,那时候已经不是初学者,已经比较深入了
    我是从初学者角度出发,我在这里看到的这种奇怪论调根本不是从初学者角度出发,而是本身已经比较高阶的开发者的想当然
    shm7
        113
    shm7  
       2018-09-11 11:44:22 +08:00 via iPhone
    试试 julia
    SuperMild
        114
    SuperMild  
       2018-09-11 11:46:59 +08:00
    @myyou Go 入门也不是不行,我上面几次回复,都有注意提到一点 “有没有人手把手教”。每种语言都有自己的特点,而写教程的人会被这些特点影响,Go 的教程我看过很多,基本上都是假设读者已经有编程经验,对很多编程入门需要了解的东西都不讲的。而 C、Python, Java 之类的教程则不一样了,大量入门知识,大量优秀入门教程(注意是编程入门,不是语言入门)。

    Go 有优秀的语言入门教程,但编程入门资料就非常缺乏了。
    myyou
        115
    myyou  
       2018-09-11 11:47:57 +08:00
    @shm7 Julia 目前也就是科研人员在用
    shm7
        116
    shm7  
       2018-09-11 11:49:31 +08:00 via iPhone
    @myyou ml 了解一下
    Aoang
        117
    Aoang  
       2018-09-11 11:56:31 +08:00 via Android
    @clino 请问你使用 Golang 吗?对 Golang 的了解程度如何?
    如果你深入了解过你就能明白 Golang 为什么不适合零基础的人入门了。

    至于会用和理解,这根本就不存在的。

    例,切片原理。
    Golang 切片的结构是指向数据的指针,长度和容量。复制切片或者在切片上创建新切片,切片中的指针都指向相同数据内存区域。
    没学过 C,指针是什么?长度和容量怎么理解和实现?

    Golang 的切片,你完全就可以在 C 上实现一个,因为 C 没有,你得自己造轮子。当你理解了切片原理,才能知道该怎么用,这样才能避免在开发的时候出现错误。
    kangkang
        118
    kangkang  
       2018-09-11 12:03:06 +08:00
    拿 golang 和 python 类比的明显没有深度用过 golang...起码到目前为止 golang 这门语言还是需要有 hack 精神和能力的,想把它当 python 或者 java 那样的黑盒用是不可能的
    myyou
        119
    myyou  
       2018-09-11 12:21:16 +08:00
    @SuperMild 的确,golang 太新,不像其他语言有那么多的教程,不过也再逐渐改善。
    waterlaw
        120
    waterlaw  
       2018-09-11 12:29:03 +08:00 via Android
    楼上讲的都有点道理。 编程本质上还是逃离不了处理器指令, 内存,io, 异常处理等等, 如果是学习使用的话, 可以先了解一门语言的基本语法和概念, 遇到问题再去补相关知识, 计算机编程从来不是会用一门语言就会的, 要多推敲代码, 减少内存占用加速 io 操作什么的, 才是重点。 楼主计算机基础不是很好的话推荐一本书给你,《 深入理解计算机系统》, 可能还是要学下 c 语言, 毕竟 c 语言是除了汇编外离操作系统最近的语言, 而且语法也简单, 对你学 go 也有帮助。
    abusizhishen
        121
    abusizhishen  
       2018-09-11 12:42:08 +08:00 via Android
    go 语言简单,学习的过程最好是工作驱动,否则没有应用场景,也很快会忘得
    abusizhishen
        122
    abusizhishen  
       2018-09-11 12:42:45 +08:00 via Android
    极客时间,跟郝林学 go
    dingyaguang117
        123
    dingyaguang117  
       2018-09-11 13:12:23 +08:00
    C 上学的时候不是都学过么~
    gowk
        124
    gowk  
       2018-09-11 13:30:52 +08:00
    等 Go 2 出来再学不迟,引入了泛型和改进的错误处理机制后,一大波库都会根据泛型重构,那时 Go 的生态会更好
    gowk
        125
    gowk  
       2018-09-11 13:32:21 +08:00
    @Aoang 深得我心
    clino
        126
    clino  
       2018-09-11 13:56:10 +08:00
    @Aoang
    "没学过 C,指针是什么?长度和容量怎么理解和实现?"
    你这个是说要拿 Golang 里切片的 C 语言实现去尝试理解切片对吧?
    意思是如果没学过 C 不从切片的实现去理解,而直接在 Golang 里实践,从而在脑子里建构对切片的理解是无法做到的?或者说比先学 C 的指针数组再学这个成本更高?

    我没办法验证这个想法因为我原来就会 C,但我认为没学过 C 也是能理解的,而且成本比先去学 C 再来理解成本更低
    Aoang
        127
    Aoang  
       2018-09-11 14:15:39 +08:00 via Android
    @clino Golang 自带切片,且没有指针运算,你怎么实现?
    在大脑构建对切片的理解,你确定零基础的人能做到?
    完全就是不存在的。

    话题的对象是零基础的人,你零基础的时候能直接理解切片?

    C 之所以难,很大一部分程度就是在指针上。Golang 的指针没有指针运算,没有其他语言的基础,想理解切片,对于零基础的人有多吃力?

    目前招聘 Golang 的企业都只招聘中级、高级,因为几乎没有初级。都是 C/C++、Java、Python 等等其他语言转过去的。
    编程入门首选 C,兴趣爱好选 Python,谋生之计选 Java。Golang,对于现在来说,有编程基础的人一天上手,没编程基础的人上手再快,也会掉坑里。
    reus
        128
    reus  
       2018-09-11 14:22:42 +08:00
    @Ediacaran DSL? go 编译器就是 go 写的,哪个 DSL 能自举的?还有一堆存储和基础服务的软件你不知道?
    reus
        129
    reus  
       2018-09-11 14:24:08 +08:00
    @gowk 要学现在就学,go2 都不知道要几年后了。
    clino
        130
    clino  
       2018-09-11 14:39:17 +08:00
    @Aoang 举个例子,参考这篇文章我就能理解 Golang 里的切片而不用 C 的知识
    https://segmentfault.com/a/1190000006056800
    这就是我说的就在 Golang 中实践来构建对于切片的理解
    clino
        131
    clino  
       2018-09-11 14:43:55 +08:00
    @Aoang "编程入门首选 C,兴趣爱好选 Python,谋生之计选 Java。Golang"
    我一直没有讨论语言本身的学习成本,我一直针对的是学 Golang 必须要先学 C 这种论调

    另外我认为编程入门也可以用 Python,感觉你一定要理解到底层的具体实现才能叫"入门"?那么那些从 Scratch 开始的岂不是更奇怪?
    Aoang
        132
    Aoang  
       2018-09-11 15:37:06 +08:00 via Android
    @clino 你确定零基础的人看得明白?更多的是一知半解吧。且这篇文章讲的并不是基础。

    没谁说学 Golang 必须先学 C,话题对象是零基础的人,话题是入门编程,不是学习某一种语言。

    至于是不是需要了解底层,我说的是基础,而不是底层。当解决一个问题可以使用多种方式的时候,最先使用的是自己熟悉的,但是自己熟悉的并不是最高效率的时候,是不是要了解那种方式效率更高?你不了解基础怎么去判断?凭借自己的感觉和经验?
    ranwu
        133
    ranwu  
       2018-09-11 16:18:54 +08:00
    在 hackernews 上看到一篇文章介绍用 go 写的微服务,reddit 的广告系统,说响应时间从 90ms 提高到 10ms,感觉很牛逼。可以从框架入手,写个实际的应用,然后再看源码·=·
    clino
        134
    clino  
       2018-09-11 16:22:05 +08:00
    @Aoang 你说的理解必须理解到底层? 比如 python 的 dict 我认为了解其特性会使用就叫入门了,你认为这不叫入门叫一知半解,必须了解其实现细节才行? 但是 C 里面没有 dict 没办法从 C 这里学起怎么办?
    这个问题就和你说的切片一样,如果我只用 Golang 掌握其概念,能使用,我认为这就足够入门能利用其做不少开发了.
    Aoang
        135
    Aoang  
       2018-09-11 16:31:26 +08:00 via Android
    @clino Golang 是独立特行的,能使用不代表会使用。

    看了看你的 github,听别人说千遍万遍,不如自己亲身体验。

    Golang 好处是多,坏处也有。非要说 Golang 适合入门编程,你去写一个项目就能明白为什么本帖那么多 Gopher 的固执了。
    clino
        136
    clino  
       2018-09-11 16:56:13 +08:00
    @Aoang 要我说多少遍,我一直没有说"Golang 适合入门编程"这个观点

    我一直觉得奇怪的是要学 Golang 非要先学 C 的这种奇谈怪论

    如果你会 C/C++,那么是有助于你理解 Golang 没错,但是如果就要学 Golang,完全可以不会 C/C++就能入门并很好的使用,这样的成本比去学一边 C/C++/Java 再来学 Golang 更低,这是我的完整看法,你如果要批驳我请针对完整看法.
    Aoang
        137
    Aoang  
       2018-09-11 17:13:59 +08:00 via Android
    @clino 是不是奇谈怪论你怎么不去试试?看看有多少人是直接零基础上手 Golang 的?

    我回复的是楼主,对象是零基础的人,目的是入门编程。你没弄明白对象和目标有什么好说的。

    有编程基础的人一天上手,没编程基础的你怎么学?有 Golang 的入门编程书和教程吗?有的只是入门 Golang 这门语言,没有入门编程。

    至于学习成本,弄明白对象和目标了么?弄明白对象和目标了,你首先就应该知道一点,基础很重要。别扯什么能用就行,打个 hello world 和写个 TCP server 能一样吗?
    你去问问,先学基础再慢慢进阶到一定程度快,还是先丢下基础以后慢慢补快。
    myyou
        138
    myyou  
       2018-09-11 17:29:13 +08:00
    @Aoang golang 是新语言,肯定没有多少人选择零基础入门 golang 啊。楼主也只是想学学 golang 而已,还有你说的哪些编程基础,没有一样能学。而且学习一门编程语言的过程中也会涉及到相关基础。你太绝对了,而且是忽略事实的绝对。
    finalsatan
        139
    finalsatan  
       2018-09-11 19:36:22 +08:00
    推荐一下雨痕大神的 go 语言学习笔记 吧
    JokerHuang
        140
    JokerHuang  
       2018-09-12 08:55:08 +08:00
    @marcong95 我真的不得不给你点个赞... 咕
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2589 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:55 · PVG 12:55 · LAX 20:55 · JFK 23:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.