扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go学习
  • Go学院

    • Go小课
    • Go小考
    • Go实战
    • 精品课
  • Go宝典

    • 在线宝典
    • B站精选
    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
  • Go下载

    • 视频资源
    • 文档资源
Go求职
  • 求职服务

    • 内推互助
    • 求职助力
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
Go友会
  • 城市
  • 校园
推广返利 🤑
实验区
  • Go周边
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
author-avatar

GOLANG ROADMAP


首页
Go学习
  • Go学院

    • Go小课
    • Go小考
    • Go实战
    • 精品课
  • Go宝典

    • 在线宝典
    • B站精选
    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
  • Go下载

    • 视频资源
    • 文档资源
Go求职
  • 求职服务

    • 内推互助
    • 求职助力
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
Go友会
  • 城市
  • 校园
推广返利 🤑
实验区
  • Go周边
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
  • Go真实面试题汇总系列

    • 《Go基础篇》
  • 宝典内容

    • 3.Go语言中是如何实现继承的?
    • 4.数组怎么转集合?
    • 13.map取一个key,然后修改这个值,原map数据的值会不会变化
    • 16. go struct 能不能比较
    • 19. 数组是如何实现用下标访问任意元素的
    • 25. 深拷贝和浅拷贝
    • 29. go 的优势
    • 30. 如何判断channel是否关闭?
    • 31. make 与 new 的区别
    • 32. Slice 与 Array, Append()
    • 36. go语言的引用类型有什么?
    • 44. 获取不到锁会一直等待吗?
    • 45. 如何实现一个 timeout 的锁?
    • 55. make可以初始化哪些结构
    • 59. 空结构体占不占内存空间? 为什么使用空结构体?
    • 61. defer 是怎么用的
    • 62. Context 包的作用
    • 65. go 语言的 panic 如何恢复
    • 66. defer 的执行顺序
    • 71. go的init函数是什么时候执行的?
    • 72. 多个init函数执行顺序能保证吗?
    • 73. gin框架的路由是怎么处理的?
    • 74. 用火焰图的优势?
    • 75. struct的传递场景
    • 77. go的profile工具
    • 78. 怎么检查go问题
    • 79. context包内部如何实现的?
    • 80. syncpool的实现原理
    • 81. go什么场景使用接口
    • 83. go怎么实现封装继承多态
    • 84. 为什么go的变量申请类型是为了什么?
    • 85. Go和JAVA垃圾回收机制有啥区别
    • 88. node.js和go是基于什么样的考虑是用这两种语言的?
    • 89. golang垃圾回收机制了解吗?
    • 100. 怎么确定走go语言技术栈的
    • 102. 介绍Gin框架
    • 108. 什么时候会触发线程切换
    • 110. defer关键字后的函数在什么时候调用 主函数return前还是return后
    • 113. golang http库设计原理,为什么不池化
    • 114. golang gc
    • 116. 关闭一个已经关闭的 Channel 会发生什么?Channel 有缓存和没缓存的区别是什么?
    • 122. 类型断言用过吗,说说实现,如何判断断言成功?
    • 123. for true {time.Sleep(1)} 有什么问题
    • 124. sleep底层实现原理
    • 126. interface 的底层实现
    • 127. STW 在 go 的哪些阶段发生?了解1.8版本的改进吗?
    • 130. go test test 和 benchmark
    • 144. for range坑输出
    • 145. go结构体和结构体指针的区别
    • 147. go如何避免panic
    • 148. 结构体创建优化
    • 152. golang interface底层实现,使用场景
    • 153. golang类型断言,怎么用
    • 154. 听说go有什么什么的缺陷,你怎么看
    • 155. 对go有哪些认识
    • 156. go和java的区别
    • 158. 对go的中间件和工作机制有了解吗?
    • 175. Go string底层实现?
    • 177. 了解HTTP协议吗?golang HTTP库实现?
    • 186. 使用range输出一个数组,需要注意的问题
    • 187. Go管理依赖go mod命令,go mod最后的版本号如果没有tag,是怎么生成的
    • 188. 进程、线程、协程的区别?
    • 195. 说一说go的defer和chan
    • 196. golang多态、父类方法重写
    • 198. 线程和协程的区别
    • 201. Golang 的结构体的组合(实现java继承的特性)
    • 202. Golang interface的设计
    • 204. context包的用途?
    • 208. Go的数据结构的零值是什么?
    • 218. 进程线程协程的区别
    • 219. go协程的好处
    • 220. byte和rune有什么区别
    • 228. 进程线程协程区别
    • 236. go中的struct 能不能比较
    • 237. go defer
    • 238. select可以用于什么
    • 242. 用go构造一个链表怎么做,想要从链表尾部插入,怎么做
    • 245. Go语言有缓冲Channel与无缓冲Channel区别
    • 253. go channel close后读的问题
    • 256. defer的执行顺序
    • 259. go 怎么实现func的自定义参数
    • 261. defer的执行顺序
    • 262. golang的调试
    • 263. defer recover panic 执行顺序
    • 267. copy是操作符还是内置函数
    • 276. Go有哪些数据结构
    • 293. defer关键字使用
    • 294. channel有缓冲、无缓冲区别
    • 295. defer和recover的配合
    • 304. 写一个东西:一个字符串json,转成一个直接可用的map,字符串可能是任何形式
    • 305. go的通信实现
    • 306. go interface的底层实现
    • 309. go func与method之前的那个receiver的作用
    • 311. 一个函数传参一个 slice,先 append 再赋值和另一个函数先赋值再append,哪个会发生变化?
    • 312. 有没有什么线程安全的办法?
    • 321. go map时间复杂度
    • 322. go 从源码到二进制代码的整个流程
    • 324. select、epoll
    • 329. make原理
    • 330. string类型转为[]byte过程发生了什么
    • 340. runtime
    • 348. go语言中结构体指针为空,赋给一个interface{}为什么interface不为空
    • 349. defer问题
    • 350. 你能介绍一下go的包管理工具吗?除了gomod还知道哪些?
    • 355. go的值传递和引用传递
    • 357. Go的闭包语法
    • 371. go的反射
    • 374. 判断下面代码的输出
    • 377. 对象是什么,面向对象有什么好处,go 中如何实现多态
    • 379. go 的执行顺序
    • 380. golang的基础问题,比如包管理,比如值传递,比如协程
    • 383. 问了golang的interface的区别,继承,gc的原理、区别,双向链表等。
    • 408. go range 的陷阱
    • 411. 考察defer和panic执行顺序的问题
    • 414. Python和Go的区别
    • 416. go的oop与传统的oop的区别
    • 417. go里面interface是什么概念
    • 418. 相比于java、c++,go的interface有什么区别吗?
    • 421. go和node的区别
    • 422. 程序计数器作用,为什么是私有的
    • 423. PHP和 Go 对比
    • 424. defer如何实现
    • 429. 讲讲go的启动过程
    • 430. Go mod主要解决了什么问题
    • 431. Go sum里面是什么内容
    • 437. Go结构体内嵌后的命名冲突
    • 440. Go 的面向对象特性
    • 442. go init 的执行顺序,注意是不按导入规则的(这里是编译时按文件名的顺序执行的)
    • 443. interface和nil 比较。
    • 454. 一个a+b程序从编译到运行都发生了什么(从预编译到print显示到屏幕上)
    • 455. Go中struct组合与Java继承的区别
    • 458. 使用过哪些 golang 的 String 类库
    • 459. golang 断言

扫码订阅《 》或入驻星球,即可阅读文章!

100. 怎么确定走go语言技术栈的


企业题库解析小组

题目序号:(88)

**题目来源:**小米

频次: 1

答案1:(栾龙生)

Go语言

我之前是一名C++程序员,最初接触Go语言是因为使用到了Go语言的明星产品Docker,后来激起我开始想学习这门语言的欲望,并且Go程序员们还有一个非常可爱的称呼-Gopher。

Go语言,被称为"云时代的C语言",已经在某些领域逐渐替代了C、Python语言,成为不少开发者的第一生产语言,其在开发效率和运行效率之间取得了绝佳的平衡。Go语言既适应互联网应用的极速开发,又能在高并发、高性能的场景中如鱼得水。从近几年的发展趋势来看,Go语言已经成为云计算、云存储以及区块链时代最重要的编程语言。

Go语言背景

Go语言出身名门,是Google公司的亲儿子。最初由谷歌公司的Robert Griesemer、Ken Thompson和Rob Pike这3位技术大咖于2007年开始设计发明,设计新语言的最初动力来自对超级复杂的C++11特性的吹捧报告的鄙视,最初的目标是设计网络和多核时代的C语言。到2008年中期,在语言的大部分特性设计已经完成并开始着手实现编译器和运行时,Russ Cox作为主力开发者加入。到2009年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。

Go语言优势

  1. 开发效率和运行效率的折中选择

    在Go语言之前,计算机硬件发展得非常迅猛,但软件却总是跟不上硬件得步伐。

    像C、C++语言,虽然运行速度很快,但是编译效率很低,像Java、Python语言,虽然开发效率很高,但是执行速度很慢。

    而Go语言作为一名新兴语言,则站在了C和Java语言的肩膀上。Go语言虽然不像Ruby、Python等语言如此直白,也不像C、C++语言最接近系统底层。然而,Go一方面借鉴新语言的简洁,一方面又略过了如JAVA的Virtual Machine或是Python的Interpreter等中间环节,能直接将程序编译成电脑的二进制,具有相当优越的效能。

  2. 更适合多核时代

    在Go诞生的年代,由于物理上的限制,摩尔定律差不多开始hold不住了,因此,各大电脑、手机制造商为了追求更高的速度,开始加入了多核心的设计。此时,程序语言设计也要求并行处理的能力,因为早期的语言尚未遇到过这种新兴的挑战,所以在语言层面上并没有提供并行编程的设计,从而导致进行多线程、多进程编程是一件麻烦事。

    然而Go语言可以说是一个超级新星,Go内建的Goroutine类似于其它语言的线程,被称作Go协程,它更加轻量,可以轻松的同时开启数千个Goroutine,也不会占用太多空间;另一方面,在编程实现上,也更加方便,Go可以说是具有超前卓越的并行处理能力。

Go语言发展前景

历经数年的发展,Go语言已今非昔比,在各个领域都不乏成功案例。说到Go语言最先想到的开源项目就是Docker和K8s,在国内几乎所有的著名互联网公司都在使用Go。近年来市值飙升最快的国内大厂字节跳动,就是Go语言的重度使用者。BAT更不用说,在这些公司的业务中,Go都能在某方面占有重要的位置。国内也有很多公司在使用Go语言重构,如知乎早期大量的服务都是基于 Python 开发的,但在实践过程中发现 Python 资源消耗过大、不利用多人协同开发等各种问题,之后公司使用Go进行了大规模的重构,相比之前的 Python 项目,资源占用减少了 70% - 80% ,复杂接口的性能有 50% 左右的提升。

国外也有很多大厂正在使用Go,作为Go的开源者,Google在多个产品使用了Go作为主要语言。Google Chrome就运用了Go语言编写的服务器,为百万级别以上的移动用户提供更快的页面加载速度以及更低的数据使用率。

说到Go的青睐者,中国程序员可谓是主力军!有数据显示,16%的Go语言使用者都位于中国,位列全世界第一位。

下图是全国程序员8月薪资排行榜,Go的薪资水平仅次于Python,主要原因还是因为Go程序员多数集中在大厂。

rank language salary_mean salary_medium salary_min salary_max
1 rust 24293 24000 7000 45000
2 scala 20041 17500 7000 45000
3 julia 19815 20000 12500 27500
4 Python 19329 17500 6500 45000
5 Go 19246 17500 7000 45000
6 lua 19180 17500 6788 45000
7 perl 18972 17500 7000 40000
8 matlab 18905 17500 7000 37500
9 swift 18205 16000 7000 40000
10 R 17547 17500 6000 40000
11 Ruby 17021 15000 5250 37500
12 kotlin 16630 15000 5750 40000
13 c/c++ 16597 15000 6000 37500
14 haskell 16250 16250 15000 22500
15 typescript 16210 15000 7000 36842
16 Java 15256 13000 5500 37500

Go语言应用场景

  1. 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等;

  2. 分布式系统,数据库代理器等;

  3. 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用等;

  4. 云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台;

  5. 高并发,Go语言由于在语言层面适合多核时代,可以轻松开启上万个协程,所以更适用高并发的场景;

  6. 微服务,Go语言提供了很多微服务框架,如Beego、micro等;

总结

Go语言很多时候被描述为“类C语言”,或“21世纪的C语言”。从各种角度看,Go语言确实是从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸多编程思想,并彻底继承和发扬了C语言简单直接的暴力编程哲学等。

Rob曾说:”Complexity is Multiplicative”,因此Go的设计高度致力于Simplicity;Go语言诞生是为了开发各类大型系统,在庞大的程序中,不能容易出错,所以Go也相当可靠;Go诞生于2009年,借鉴了许多优秀的语言,也面对摩尔定律的挑战,因此Go具有无与伦比的效率。