下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 01 | Go语言课程介绍
00:00 / 00:00
标清
  • 高清
  • 标清
  • 普清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Go语言从入门到实战

共55讲 · 55课时,约700分钟
6092
免费
01 | Go语言课程介绍
免费
02 | 内容综述
免费
03 | Go语言简介:历史背景、发...
免费
04 | 编写第一个Go程序
免费
05 | 变量、常量以及与其他语言...
06 | 数据类型
07 | 运算符
08 | 条件和循环
09 | 数组和切片
10 | Map声明、元素访问及遍历
11 | Map与工厂模式,在Go语言...
12 | 字符串
13 | Go语言的函数
14 | 可变参数和defer
15 | 行为的定义和实现
16 | Go语言的相关接口
17 | 扩展与复用
18 | 不一样的接口类型,一样的...
19 | 编写好的错误处理
20 | panic和recover
21 | 构建可复用的模块(包)
22 | 依赖管理
23 | 协程机制
24 | 共享内存并发机制
25 | CSP并发机制
26 | 多路选择和超时
27 | channel的关闭和广播
28 | 任务的取消
29 | Context与任务取消
30 | 只运行一次
31 | 仅需任意任务完成
32 | 所有任务完成
33 | 对象池
34 | sync.pool对象缓存
35 | 单元测试
36 | Benchmark
37 | BDD
38 | 反射编程
39 | 万能程序
40 | 不安全编程
41 | 实现pipe-filter framew...
42 | 实现micro-kernel frame...
43 | 内置JSON解析
44 | easyjson
45 | HTTP服务
46 | 构建RESTful服务
47 | 性能分析工具
48 | 性能调优示例
49 | 别让性能被锁住
50 | GC友好的代码
51 | 高效字符串连接
52 | 面向错误的设计
53 | 面向恢复的设计
54 | Chaos Engineering
55 | 结束语
本节摘要

本节内容

你好,我是蔡超,目前在 Mobvista 担任技术副总裁兼首席架构师。在加入 Mobvista 前,我也曾在亚马逊,惠普等公司担任过首席软件架构师。

我是从小学四年级开始学习计算机编程的,并一直从事至今。学习和使用过很多的编程语言,如:BASIC,PASCAL,Perl,Python,C/C++,Java,Lisp,Haskel l 等,当然,也包括 Go 语言。

在 Mobvista ,我们使用 Go 语言构建了国内最大,全球排名前十的移动广告平台,这个平台每天处理着来自世界各地的超过 500 亿次请求。

为什么选择 Go 语言来完成这么大一个项目呢?我们不妨回到 Go 语言的源头看一看。

Go 语言的初步设想始于 2007 年,当时 Go 语言的三位创始人是想通过开发一种新型的语言来解决 Google 在软件开发中面临的问题:

  • 多核硬件架构;
  • 超大规模分布式计算集群;
  • Web 开发模式导致的前所未有的开发规模和更新速度。

这些也是目前广大互联网公司普遍面临的问题。Go 语言就是针对这些问题而设计的,所以它被越来越多的公司和组织所使用,包括阿里、腾讯、百度、滴滴等众多的业界知名公司,几乎都在自身业务中用到了 Go 语言。就在不久之前,知乎也舍弃了 Python,转用 Go 重构了推荐系统。

除了用于构建大规模互联网系统,在业界,包括大家熟知的 Docker,Kubernetes 也都是通过 Go 语言开发的,这也使得 Go 语言成为了云端应用的开发语言。另外,以太坊,HyperFabric 等著名区块链项目都可以通过 Go 语言开发,Go 也成为区块链开发中的常用语言。同时,企业应用及物联网等领域也都有 Go 语言的身影。

Go 语言的应用范围还在不断扩展,所以,今天学习和掌握 Go 语言,对于你未来的职业发展和个人成长都有着非常重要的意义。

从开发者的角度看,Go 语言有着很多为开发人员所喜爱的特性:

简单:较之 C 语言的 37 个关键字和 C++ 11 的 84 个关键字,Go 只有 25 个关键字;特别是对于一些复杂编程任务如:并发编程,内存管理,Go 语言有内置的并发支持及垃圾回收机制。

高效:Go 是编译的静态类型语言,尽管支持了垃圾回收,但 GO 中仍可以通过指针进行直接内存访问。

生产力:Go 语言有简单清晰的依赖管理,简洁的语法,以及独特的接口类型,甚至是一些编程方式的约束,如支持复合而不是继承的扩展方式,这些特性使得它成为一门极具生产力的语言。

如果你有 PHP、Java、C/C++ 等等其他一门或多门编程语言的使用经验,现在想转到 Go 语言上面,并希望学完后快速用 Go 语言进行实际的项目开发,那么这门课程非常适合你来学习。

我们会从基本的 Go 语言语法讲起,并逐步过渡到进阶部分,包括实际开发中的常见并发任务的实现,常见架构模式(pipe-filter,micro-kernel) 的实现,性能调优及高可用服务的实现等,相信你学完本课程之后,就可以快速开始使用 Go 语言进行实际项目开发了。

我身边有不少有过其他语言编程基础的工程师都开始学习和使用 Go 语言,但是正如 C 语言程序员学习 C++ 一样,由于原有习惯思维模式的影响,很多工程师在使用 Go 语言时也会常常会陷入一些误区,很多人会写出用 Go 语言表示的 C 程序或 Java 程序。

比如左边这段代码,在 C/C++ 程序员的眼里是不是觉得存在严重 Bug?可是他在 Go 程序里是完全正确的:

func foo() *string {
   s := "Hello World"
   return &s
}
复制代码

在实际的开发工作中,工程师们常常陷入的误区还有:

  1. 大量使用共享内存的方式进行并发控制,而忽略了 Go 内置的 CSP 并发机制;

  2. Java 程序员在编写 Go 程序喜欢在方法调用间直接传递数组,导致大量内存复制。其实,与 Java 不同,Go 的数组参数是通过值复制来传递的。

  3. Java 程序员用 Go 时也总是喜欢创建一个只包含接口定义的包,以处理依赖关系。而 这 Go 中其实大可不必,在 Go 中接口的实现对接口定义是没有依赖的。

类似的问题还有很多很多,那么针对这些问题,我在这个课程中融入了个人及团队在使用 Go 语言进行实际项目开发中的经验和教训,还会通过大量代码实例讲解 Go 语言的特性,并与其他语言的进行比较,指出它们在编程和应用上的差异。

通过这门课程,我可以帮助那些有其他语言编程基础,特别是有 C,C++ 或 Java 编程经验的工程师们打破已有的思维模式,快速掌握 Go 语言,有效利用其特性来进行实际项目的开发。

在接下来的学习过程中,也希望你多多和我留言互动,将自己碰到的问题或者学习心得分享出来,让更多的人能够从中受益。我是蔡超,我在极客时间等你。

展开
 写留言

精选留言(49)

  • 2019-03-04
    30才开始转行编程,已经接触了好几种语言了,趁早再攒点货。

    作者回复: 做自己喜欢的事,什么时候都不晚

    10
  • 2019-03-10
    发亮感人
    5
  • 更早的接触,带来了很好的兴趣,继续go学习

    作者回复: The most important thing is to find what you love. Enjoy!

    5
  • 2019-03-06
    还没学完python,go又火了,学完python就来学go 😅😅😅
    4
  • 2019-03-06
    喜欢老师的风格,抓重点不拖拉,希望看到go在生产环境应用的实例分析?老师有计划出书吗?如果出的话,大概是什么方向和定位?另外,能给有一定编程经验的开发推荐几本有关go的书吗?谢谢

    作者回复: 谢谢支持!
    出书暂无计划。
    学习Go的书不少,但我只想推荐一本
    Go程序设计语言

    3
  • 看完了极客时间的Python,这次来看go,希望对我这种小白可以友好一些,当然,我也得努力尽快成长!
    2
  • 2019-03-06
    我35岁了,2006年毕业就开始从事软件开发的工作。也用Go语言开发过几个项目,对Go语言并发等其他特性都有足够深入的理解。这两年创业很辛苦,除了写代码还要应付各种事情,没时间坐下来听课、交流,更别提飞到另外一个城市参加有意思的技术大会。很向往,很怀念。

    这次呢,就想利用碎片时间观摩一下业界大牛对Go语言的理解,希望能加深自己在这方面的认知,也希望能从只言片语中找到新的大陆,哪怕是大神不经意间提到的某某小工具,或许也能给我带来惊喜,提高开发效率。

    另外,也想对Go语言和开发者表达一下支持。99元不会亏的!
    展开
    2
  • 2019-03-06
    今年的一个目标就是学好golang,刚看完《The Go Programming Language》,这个课程来的正是时候,是我最快速订阅的课程。
    2
  • 2019-03-06
    我去年才开始系统的学编程,原来一直搞网工,希望能学好go做区块链开发,讲得通俗易懂,知其然而知其所已然。
    2
  • 2019-03-04
    羡慕小学四年级就接触编程,我大二才接触。(๑•̀ㅂ•́)و✧加油

    作者回复: 对于你喜欢的事,什么时候开始,都是最好的时候。加油!

    2
  • 2019-05-21
    老师英语发音真标准
    1
  • 2019-03-06
    go 非常值得学习
    1
  • 2019-03-06
    今年的小目标,跟上Go开发的潮流
    1
  • 2019-03-06
    技多不压身,希望能通过这个专栏获得一项新的技能,今年目标利用go开发一套项目
    1
  • 2019-03-06
    之前在极客上订阅的《趣谈网络协议》和《软件测试52讲》已经看完了,收益颇丰,近期看到Go如此火爆,果断加群找到了组织,跟着大佬们好好提升 🤣🤣
    1
  • 2019-03-06
    java不能直接操作内存 有垃圾回收
    c/c++可以直接操作内存 无垃圾回收
    go 集成了二者的特性,即可直接操作内存,又有垃圾回收机制

    这可能就是 为什么很多大厂都使用go语言的原因吧~
    1
  • 2019-11-22
    程序也没问题啊

    #include <stdio.h>

    char *func1 ()
    {
        char *str= "123";
        return str;
    }

    int main(int argc, const char *argv[])
    {
        char *s = func();
        printf("%s",s);
        return 0;
    }
    展开
  • 2019-10-29
    课程笔记。
    三大问题。
    多核软件架构,超大规模集群,web 开发的前所未有的开发规模,更新速度。
    bat 滴滴等都在用,知乎舍弃py 转向go
    docker k8s
    又称云端开发语言。
    又是区块链开发语言。

    开发人员喜欢的特性
    1 简单 25个关键字
    2 内置并发支持,垃圾回收
    3 高效,编译静态语言。
    4 生产力 简介清晰的依赖管理,独特的接口类型设计,编程方式约束。参考ios 操作 剁掉很多。大道至简。

    误区 共享内存并发控制,忽略go 语言本身csp并发机制。
    再者 java 的不优雅引发的坑。
    展开
  • 2019-10-29
    先库存起来在说。
  • 2019-09-15
    想请教一下老师,golang的微服务有什么推荐的吗

    作者回复: https://github.com/easierway/service_decorators/blob/master/README.md

    1