【go语言基础】go语言开篇,Golang高级工程师每日面试题精选

53 阅读7分钟

动态类型语言和静态类型语言的区分:

动态类型的语言:

动态类型语言和动态语言是完全不同的两个概念。

动态类型语言:是指在运行期间才去做数据类型检查的语言,说的是数据类型,

动态语言:说的是运行是改变结构,说的是代码结构。 动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。

动态主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。

静态类型语言

静态语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。

主要语言:C、C++、C#、Java、Object-C。

Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么。

提前知道值的类型的好处有很多,比如编译器可以合理的使用这些值,可以进一步优化代码,提高执行的效率,减少 bug 等等。

目前go语言的招聘


目前在boss直聘上,go语言的招聘岗位还是蛮多的:

在这里插入图片描述

从上图可以看到,想要招go的工作,必须要懂docker和k8s,这其实也是为什么要在云原生的后面才开始学习go的原因。

有哪些公司在用go


Go语言是Google公司创造的语言,也是Google主推的语言。国外如Google、AWS、Cloudflare、CoreOS等,国内如七牛、阿里、小米、等都已经开始大规模使用Golang开发其云计算相关产品。

很多大公司的项目,比如腾讯的蓝鲸平台,百度的BFE项目,阿里的CDN以及其他系统部门,京东的推送系统,云存储,以及京东商城,都在使用go

而对于运维来说,可以使用go语言做运维,甚至开发一些k8s控制节本

为什么大家都热衷于使用go语言呢?

因为,安全性高,而且能提高开发人员的生产力,并发性比较强。

有哪些go语言的优秀项目?


  • docker,golang头号优秀项目,通过虚拟化技术实现的操作系统与应用的隔离,也称为容器;

  • kubernetes,由google开发,简称k8s,k8s和docker是当前容器化技术的重要基础设施;

  • etcd,一种可靠的分布式KV存储系统,有点类似于zookeeper,可用于快速的云配置;

  • codis,由国人开发提供的一套优秀的redis分布式解决方案; tidb,国内PingCAP 团队开发的一个分布式SQL

  • 数据库,国内很多互联网公司在使用; influxdb,时序型DB,着力于高性能查询与存储时序型数据,常用于系统监控与金融领域;

  • cockroachdb,云原生分布式数据库,继NoSQL之后出现的新的概念,称为NewSQL数据库;

  • beego,国人开发的一款及其轻量级、高可伸缩性和高性能的web应用框架; caddy,类比于nginx,一款开源的,支持HTTP/2的

  • Web 服务端; flynn,一款开源的paas平台;

  • consul,HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置;

  • go-kit,Golang相关的微服务框架,这类框架还有go-micro、typthon;

  • go-ethereum,官方开发的以太坊协议实现; couchbase,是一个非关系型数据库;

  • nsq,一款高性能、高可用消息队列系统,每天能处理数十亿条的消息;

  • packer,一款用来生成不同平台的镜像文件的工具,例如VM、vbox、AWS等;

  • doozer:高速的分布式数据同步服务,类似ZooKeeper; tsuru:开源的PAAS平台,和SAE实现的功能一模一样

  • gor:一款用Go语言实现的简单的http流量复制工具;

go相关的资料及书籍推荐


  • go语言中文网 算是一个比较全的网站了,汇集了go相关的学习资料与技术文章

  • GO技术交流论坛 目前活跃度还算可以,整体来看用户不是很多,毕竟go也属于小众语言,能够理解

  • Go语言知识图谱 为打造个人体系做参考

  • 推荐书籍: 《Go语言趣学指南》《Go语言入门经典》《Go语言编程》《Go语言高级编程》《Go语言并发实战》《Go Web编程》《Go学习笔记》

学习方法


1. 36循环系统

学习任何编程语言都可以用到我独创的36循环系统, 所谓的36循环系统就是,每个知识点练习36遍,每个实验练习36遍。

抄也要抄36遍,很多时候都是量变引起质变,这个方法看上去简单,但对于我来说相当高效, 当别人还在到处翻译资料,看看为什么这样的时候,我已经通过写36遍,自己琢磨出来了为什么这么写的原因。

所以有时候最笨的方法,往往是最高效的。

2. 复盘

所谓的复盘可不是去回想一下今天学了啥,而是看看现在学的用shell或者用其他编程语言该如何去写。 前期你可以用自己拿手的编程语言去练习。

不过的确有小伙伴学go是第一门语言,没有学过其他的, 这个时候你就没法用这种方式去复盘,但你可以用第3种

3. 思维导图

一定要学会画思维导图,思维导图能帮助你理解你所学的内容,并把所有内容串联起来形成一个整体,我们把他叫技术树。

一个人的技术树越丰富,相对来说对这门语言掌握的越全。

知识的学习,不管是编程还是其他,最核心的一点就是记忆,不管你通过什么方法,只要记住了,假以时日你就可以灵活运用。

总结


今天我们简单聊了聊go这门编程语言,以及我在CSDN分享的初衷,顺便分享了一些相关的资料和书籍。

以下是本篇文章的目录。

文章目录

关于资料的部分,我并没有分享官网的,因为对于初学者而已,他们打不开官方网站,官网虽好,但形同虚设。

img img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!