Go语言学习

本文最后更新于2015年11月8日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

=1.why=
  • 互联网时代的C语言
  • 语言级别的并行支持(Python的多线程那叫一个鸡肋)
  • 语法学习起来相对来说比较简单(在有了C/Python/PHP的编程经验之后)
  • 想尝试一门新语言
=2.how=

the way i learn Golang(website/book/blog)

=3.what=

就我而言,我现在的学习顺序是:

1.先看

逐个例子的看,慢慢的改例子,然后运行;确保自己理解教程中给出的每一行代码,以及说明文字。

2.再看

《Go语言程序设计(Programming in Go)》

少废话,多动手。边干边学效率是最高的。

3.练习
  • 用 Golang 实现平时需要的一些小功能
  • Project Eular (每学一门新语言的时候,可以做一遍ProjectEular,复习语法和熟悉特性)

{

  • 字符串操作
  • 文件操作(内容查找、logging、日志分析、IP库分析、配置文件解析、Json解析、XML解析)
  • 数据库操作(MySQL、Postgres、Redis、Mongodb)
  • 网络编程(爬虫、暴力破解、网络包抓取/解析)
  • 正则表达式
  • 加解密、哈希算法
  • 去重、排序
  • 压缩、解压缩
  • 日期操作、邮件操作
  • Web开发
  • 性能调试

}

4.特性了解
  • 字符和字符串,切片slice,映射map,指针
  • if / switch / for[…range]
  • defer / panic / recover
  • init() / main()
  • goroutine / select / channel
  • package的组织形式
5.源码阅读
  1. 暂时只能看一些简单的源代码片段;
  2. 待对Golang的package的组织形式熟悉了一些之后开始找复杂的源码进行阅读学习;
  3. #ToLearn#
6.项目练习/编写(还没开始……)

……Null……


我觉得学习一门语言最重要的就是做到三点,第一看基础知识,第二学习抄代码,第三学习写代码。

学习某个语言要知道某个语言擅长和不擅长的地方,要会灵活运用、要会扬长避短。在学习了基础的知识(语法)之后,找个目标项目(你所在领域的某些算法或者业务,可以用该种语言实现)去做,一点点积累、思考,只有做项目才能串联所学的知识点、加深对该语言的认识和编程能力。

参考链接:

=EOF=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2521.html

《Go语言学习》上有24条评论

  1. 系统学习GO,推荐几本靠谱的书?
    https://www.zhihu.com/question/30461290
    https://github.com/wonderfo/wonderfogo/wiki
    http://www.flysnow.org/categories/Golang/

    基础推荐官方文档,没有什么比这个更清晰了。
    其次参考Go指南,练习一遍;
    然后再结合《Go语言圣经》这本书,深入理解Go的基础;
    然后通过《Go语言实战》这本书进行实践;
    最终再通过一些别的第三方库源代码和实践,就可以完全掌握了。

  2. Go 语言编程中——「指针」和「值」在参数以及返回值中的选择
    Pointers vs. values in parameters and return values
    https://stackoverflow.com/questions/23542989/pointers-vs-values-in-parameters-and-return-values

    Methods using receiver pointers are common; the rule of thumb for receivers is, "If in doubt, use a pointer." 使用接收指针的方法很常见,接收类型的一个法则就是——如果有疑问,使用指针就行。

    Slices, maps, channels, strings, function values, and interface values are implemented with pointers internally, and a pointer to them is often redundant.
    切片、字典、通道、字符串、函数以及接口,它们内部都是通过指针来实现的,所以指向它们的指针通常是多余的。

    Elsewhere, use pointers for big structs or structs you'll have to change, and otherwise pass values, because getting things changed by surprise via a pointer is confusing.
    在其他地方,当要对大的结构体或者你必须改变的结构体使用指针的方式;其它的地方就用传递值的方式,因为通过传递指针而导致内容被意外地改变是比较令人困惑的。

  3. 如何客观评价 Go 语言
    https://mp.weixin.qq.com/s/WOvjEQc6Tr3hcZlCu5aLkA

    优点
    1. 简单
    2. 兼顾开发效率和性能
    3. 语言级别的特性支持

    缺点
    1. runtime
    2. 并不能做到真正高并发高性能

    其他
    这里谈一下 Golang 自问世以来一直被诟病的几个问题。
    1. GC
    大概从 1.0 版本以来,GC 就一直被诟病。值得欣慰的是,Golang 的 GC 一直在发展,基本在每个版本都有一定的改进。1.8 版本是 GC 的一个里程碑,使用并发三色标记法的 GC 算法的stw 时间甚至达到了微秒级。目前社区貌似在讨论分代 GC 的方案,这个后面专门写一篇文章细说。
    2. 包管理
    包管理也是一直被诟病,主要是一直没有一个官方的解决方案。直到去年官方终于开始有行动了,推出了 module,相对来说还是一个很不错的方案。
    3. 泛型
    Golang 没有支持泛型的很大一个原因是泛型太复杂。尽管很多人说 interface 也能实现泛型功能,但是这个泛型还是有一些本质的区别的。没有泛型确实是一个减分项。

  4. 一刻钟学会Go语言
    https://mp.weixin.qq.com/s/k5CpO6vVSMP4tOYAcAXcqg
    https://learnxinyminutes.com/docs/go/
    https://learnxinyminutes.com/docs/zh-cn/go-cn/

    发明Go语言是出于更好地完成工作的需要。Go不是计算机科学的最新发展潮流,但它却提供了解决现实问题的最新最快的方法。
    Go拥有命令式语言的静态类型,编译很快,执行也很快,同时加入了对于目前多核CPU的并发计算支持,也有相应的特性来实现大规模编程。
    Go语言有非常棒的标准库,还有一个充满热情的社区。

    有编程经验的小伙伴,朗诵以下代码块,完成Go语言快速入门。

  5. 源代码阅读方法(附Go语言项目的代码阅读技巧)
    https://www.lijiaocn.com/%E6%96%B9%E6%B3%95/2019/05/31/go-code-read-method.html

    之前在阅读代码方面存在认知误区,一开始就从入口开始阅读,并不停地跳转,试图理清每一个细节。这种方式会让阅读代码的过程比较煎熬,耗费时间长效果却不好,不是正确的做法。正确的做法是先看森林再观树木,即先对整个项目的代码结构有基本认知,摸清项目代码的实现套路,然后按需逐行阅读。

    说明
    一:摆正认识
    二:找到入口
    三:梳理目录
    四:逐行阅读
    Go项目的一些阅读技巧
    技巧1:忽视真正入口之前的代码
    技巧2:接口的实现一般就在接口定义的下方
    技巧3:见到了类似于「类」的结构,要感动地想哭
    技巧4:发现套路——类似于框架

  6. [译] Go语言测试进阶版建议与技巧
    https://pengrl.com/p/32101/

    阅读本篇文章前,你最好已经知道如何写基本的单元测试。本篇文章共包含3个小建议,以及7个小技巧。

    建议一,不要使用框架
    建议二,使用”_test”包名
    建议三,避免全局常量配置项

    技巧一,加载测试数据
    技巧二,保存测试时的预期结果至.golden文件中
    技巧三,测试时的初始化、清理代码
    技巧四,当依赖第三方可执行程序时
    技巧五,测试包含os.Exit的代码
    技巧六,将mocks、helpers放入testing.go文件中
    技巧七,单独处理耗时长的测试

发表评论

电子邮件地址不会被公开。 必填项已用*标注