为什么是 Go?
传统的编程语言都存在一些普遍的缺点:
学习成本高:诸如 C++ 要理解作者思想,Java 要学习大量库;
编译速度慢:代码的编写、预处理、编译与运行流程花费时间太长;
无法使用现代计算机发展:现代计算机发展迅速,C、C++ 生态;
项目迭代周期短:996 已经成为常态,任务压的又压,在如何提高团队生产效率,又能保证项目质量两者之前权衡成了一个比较重要的问题。
所以急需一门语言改善以上问题,这时候的 Go 的优势就很突出了。
Go 语言的优势
Go 作为 Google 开源的编程语言,近些年来,除 Docker 是用 Go 写的外,知乎、Bilibili 也都纷纷迁移到 Go。同时,面对中国的发展优势,Go 的特性被发挥得淋漓尽致。
如果你去上述公司面试,有 Go 基础、懂 Go 核心的你,面试通关是不是会更容易?
总体说来,Go 语言的优势有以下几个方面:
如果有 C 语言的加持,可以轻松学会;
部署简单,实现高并发很轻松,内存占用也非常省;
代码简洁、格式清晰统一、方便协作与阅读;
具备性能强劲但是开发效率不输给一些动态语言,适合编写一些瓶颈业务。
学习与使用 Go 语言看起来很简单,但真的这么简单就能学会吗?
重学 Go 语言
“看完 Go 文档,输出完「Hello World 」,我的 Go 就入门了!”
当然不是。
并发与协程、基于消息传递的通信方式、丰富实用的内置数据类型、函数多返回值、defer 机制、reflect 反射、高性能 HTTP 服务、工程管理。
这些都是你必须要掌握的。
脱离 Go 文档之外,学习 Go 会遇到哪些问题:
程序怎么理解一个变量?
编码过程中为什么使用常量?
Go语言里有枚举类型么?
Go语言引用类型和其他语言有什么不同?
同是流控制语句,switch 和 if 有什么不同?
在编码过程中写过 goto 语句么?
Go 支持支持尾递归优化么?
如何判断两个函数变量相等?
匿名函数有性能问题吗?
使用闭包会导致什么性能问题?
什么是错误?和异常有什么区别?
是不是数组就一定能分配在栈上?
字符串怎么性能优化?
字典怎么性能优化?
字段对齐对结构体有什么影响?
Go 语言怎么实现 OOP 的方法和接口?
接口调用有哪些性能问题?
......
有问题,就要有解决方案,面对 Go 语言的知识漏洞,你该怎么办?
跟我一起重学 Go 语言吧!
我是李永京,从事服务器后端系统开发 10 年,工作中先后使用过 C#、Java、Go 等语言。因为现在的项目需要把平台迁移到 Go,所以我从零开始构建基础设施框架,并进一步在框架上开发各种业务系统。我在迁移过程中逐步自研了一套功能完善的基础框架,同时也对 Go 语言的特性有了更深入的了解,于是,便有了现在这个专栏。
这个专栏的目的是教你如何把一门语言学精通了。什么叫精通,就是该会的东西都会了、对语言有更全面更深入的认识,并且掌握怎么利用逆向方法推导某种细节,从而带到其他语言的学习中去。不再吃力地学习每一门新语言,从而在工作与面试中更加得心应手。
你可以把一门语言看成一个长期项目,通过这个长期项目来锻炼提升自己。比如 Go,在代码实现方面,主要有类型系统设计、函数执行、内置的数据结构、对象系统设计、运行时、标准库、工具链等方面,但是这些方面仅仅看文档就能深入理解吗?
市面上的文章大多数属于帮助文档型,其目的就是介绍基本语法、使用 API。要知道,技术日新月异,大多数初学者一直沉浸在学习各种各样的语言、框架中。虽然学得广,但是学得不精,无法抽离思想应用到其他语言,达到融会贯通。
细节是魔鬼,如果没有一个人把你带到细节里,你可能就无法掌握正确的学习方法,因为任何简单事物的背后必然隐藏着复杂的逻辑。这也是为什么我要写这个专栏的原因。
我希望这个专栏能与你一起:
抽丝剥茧,从 Go 背景知识到灵活使用,让你知其然也知其所以然。
一起去思考 Go 语言设计,它是怎么设计的?为什么这样设计?
使用反汇编、编程范式推导 Go 核心原理。
从架构思想层面解析 Go 语言每个细节。
一起理解官方文档中表达不清楚的知识点,助力项目与面试。
《重学 Go 语言》系列分为基础篇与进阶篇两部分。
基础篇
第一部分:类型,包含类型存储、基础类型、引用类型、自定义类型等
第二部分:表达式,包含流控制等
第三部分:函数,包含函数执行、调用堆栈、参数及返回值、闭包等
第四部分:数据,包含基础数据类型、常用数据结构等
第五部分:对象,包含面向对象理论、方法、接口等
进阶篇
第六部分:并发,进程、线程、协程、通道、同步等
第七部分:系统,内存管理、垃圾回收、调度、系统监控等
第八部分:标准库,io、bytes、context、net、db 等
第九部分:测试,单元测试、性能测试、代码覆盖率、性能监控等
即日起至 3 月 24 日,《重学 Go 语言(基础篇)》限时特惠!现在订阅专栏,带你一起看文档以外的 Go 语言!