2020年Go语言有哪些不得不看的最新面试题?
1、编译执行下面代码会出现什么?
package main
var(size :=1024max_size = size*2
)
func main() {println(size,max_size)
}
解析 考点:变量简短模式 变量简短模式限制: - 定义变量同时显式初始化 - 不能提供数据类型 - 只能在函数内部使用
结果:
syntax error: unexpected :=
2、下面函数有什么问题?
package main
const cl = 100var bl = 123func main() {println(&bl,bl)println(&cl,cl)
}
解析 考点:常量 常量不同于变量的在运行期分配内存,常量通常会被编译器在预处理阶段直接展开,作为指令数据使用,
cannot take the address of cl
3、编译执行下面代码会出现什么?
package mainfunc main() {for i:=0;i<10 ;i++ {loop:println(i)}goto loop
}
解析 考点:goto goto不能跳转到其他函数或者内层代码
goto loop jumps into block starting at
4、编译执行下面代码会出现什么?
package main
import "fmt"func main() {type MyInt1 inttype MyInt2 = intvar i int =9var i1 MyInt1 = ivar i2 MyInt2 = ifmt.Println(i1,i2)
}
解析 考点:Go 1.9 新特性 Type Alias 基于一个类型创建一个新类型,称之为defintion;基于一个类型创建一个别名,称之为alias。 MyInt1为称之为defintion,虽然底层类型为int类型,但是不能直接赋值,需要强转; MyInt2称之为alias,可以直接赋值。
结果:
cannot use i (type int) as type MyInt1 in assignment
5、编译执行下面代码会出现什么?
package main
import "fmt"type User struct {
}
type MyUser1 User
type MyUser2 = User
func (i MyUser1) m1(){fmt.Println("MyUser1.m1")
}
func (i User) m2(){fmt.Println("User.m2")
}func main() {var i1 MyUser1var i2 MyUser2i1.m1()i2.m2()
}
解析 考点:Go 1.9 新特性 Type Alias 因为MyUser2完全等价于User,所以具有其所有的方法,并且其中一个新增了方法,另外一个也会有。 但是
i1.m2()
是不能执行的,因为MyUser1没有定义该方法。 结果:
MyUser1.m1
User.m2
6、编译执行下面代码会出现什么?
package mainimport "fmt"type T1 struct {
}
func (t T1) m1(){fmt.Println("T1.m1")
}
type T2 = T1
type MyStruct struct {T1T2
}
func main() {my:=MyStruct{}my.m1()
}
解析 考点:**Go 1.9 新特性 Type Alias ** 是不能正常编译的,异常:
ambiguous selector my.m1
结果不限于方法,字段也也一样;也不限于type alias,type defintion也是一样的,只要有重复的方法、字段,就会有这种提示,因为不知道该选择哪个。 改为:
my.T1.m1()
my.T2.m1()
type alias的定义,本质上是一样的类型,只是起了一个别名,源类型怎么用,别名类型也怎么用,保留源类型的所有方法、字段等。
7、编译执行下面代码会出现什么?
package mainimport ("errors""fmt"
)var ErrDidNotWork = errors.New("did not work")func DoTheThing(reallyDoIt bool) (err error) {if reallyDoIt {result, err := tryTheThing()if err != nil || result != "it worked" {err = ErrDidNotWork}}return err
}func tryTheThing() (string,error) {return "",ErrDidNotWork
}func main() {fmt.Println(DoTheThing(true))fmt.Println(DoTheThing(false))
}
解析 考点:变量作用域 因为 if 语句块内的 err 变量会遮罩函数作用域内的 err 变量,结果:
<nil>
<nil>
改为:
func DoTheThing(reallyDoIt bool) (err error) {var result stringif reallyDoIt {result, err = tryTheThing()if err != nil || result != "it worked" {err = ErrDidNotWork}}return err
}
8、编译执行下面代码会出现什么?
package mainfunc test() []func() {var funs []func()for i:=0;i<2 ;i++ {funs = append(funs, func() {println(&i,i)})}return funs
}func main(){funs:=test()for _,f:=range funs{f()}
}
解析 考点:闭包延迟求值 for循环复用局部变量i,每一次放入匿名函数的应用都是想一个变量。 结果:
0xc042046000 2
0xc042046000 2
如果想不一样可以改为:
func test() []func() {var funs []func()for i:=0;i<2 ;i++ {x:=ifuns = append(funs, func() {println(&x,x)})}return funs
}
9、编译执行下面代码会出现什么?
package mainfunc test(x int) (func(),func()) {return func() {println(x)x+=10}, func() {println(x)}
}func main() {a,b:=test(100)a()b()
}
解析 考点:闭包引用相同变量 结果:
100
110
10、编译执行下面代码会出现什么?
package mainimport ("fmt"
)func main() {defer func() {if err:=recover();err!=nil{fmt.Println(err)}else {fmt.Println("fatal")}}()defer func() {panic("defer panic")}()panic("panic")
}
解析 考点:panic仅有最后一个可以被revover捕获 触发panic("panic")后顺序执行defer,但是defer中还有一个panic,所以覆盖了之前的panic("panic")
2020年Go语言有哪些不得不看的最新面试题?相关推荐
- 2020年那种语言最受欢迎_2020年15种最佳和最受欢迎的CMS平台(比较)
2020年那种语言最受欢迎 Are you wondering what CMS platform to use for building your website? 您是否想知道使用什么CMS平台来 ...
- C语言2020年作业,2020年c语言上机报告范文【四篇】
<2020年c语言上机报告范文[四篇]>由会员分享,可在线阅读,更多相关<2020年c语言上机报告范文[四篇](7页珍藏版)>请在人人文库网上搜索. 1.2020 年 c 语言 ...
- 想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(一)
你好,我是阿ken 2021/6/26 第一次优化排版和内容 之后会持续优化修改 ---------------- 版权声明:本文为CSDN博主「请叫我阿ken」的原创文章,遵循CC 4.0 BY-S ...
- 视频教程-2020新版C语言程序设计零基础入门小白自学编程-C/C++
2020新版C语言程序设计零基础入门小白自学编程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务端研发 ...
- 想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础(十 一)
大家好,我是阿Ken.很快就已经整理到了第三章~ 对于专升本_计算机文化基础我已经在博客里整理了已经一半多了,希望能够在我整理后能够帮助其他的小伙伴,这月底整理完所有的专升本_计算机文化基础的笔记,感 ...
- Android阵营苹果,刚从安卓转到iPhone阵营?那这篇指南你就不得不看了
原标题:刚从安卓转到iPhone阵营?那这篇指南你就不得不看了 iPhone虽然诞生10周年了,但是很多人之前都是安卓党,从没有用过任何一代的iPhone手机.如果我们在用了好几年安卓手机后突然转移阵 ...
- c语言程序设计河北,2020春C语言程序设计赵玲玲单元测试参考答案查询,工程经济与应用...
所以,读书不要进入这样的状态,要选择看什么书,更要扩大自己的阅读范围,不要只盯着某个类型,或者某个领域的书不放.开放性的思维,需要开放性的阅读.说完了这些读书方法,后我还想再强调一点,读书是种学习,实 ...
- 2018你不得不看的国内CRM软件排行榜
2018你不得不看的国内CRM软件排行榜 短短几年时间,CRM在中国的发展就已经非常迅猛,现在已经成为了管理软件增长最快的产业.在我们总结的CRM软件排行榜中,腾讯企点的CRM软件赫然摆在前列.而CR ...
- 程序员语言也有鄙视链!某美团程序员爆料:筛选简历时,用go语言的基本不看!网友:当韭菜还当出优越感了!...
程序员使用的语言有鄙视链吗?有人说有,有人说没有.一个美团员工发帖说,筛选简历时用go语言的基本不看.短短一句话,把对go语言的鄙视体现得淋漓尽致,难道go语言真的不如其他语言? 和他一样想法的前阿里 ...
最新文章
- 代码谱写传奇,深度揭秘中国开发者现状!
- 网狐棋牌(三) 调度引擎初步分析
- 为什么WordPress网站应尽量避免使用过多插件
- GP学习(七)—Accessing raster workspaces
- php yaf 教程,干货:PHP YAF框架实践教程——配置与多模块
- MATLAB中的视角处理
- lua能在stm32arm上运行吗_IOS App能在Mac运行!苹果这黑科技能撼动微软吗?
- 《JAVA设计模式》之中介者模式(Mediator)
- 智方8000系汽车配件进销存管理系统 v8.28 bt
- SpringBoot2源码笔记
- element-ui 下载后本地使用
- hive中的distribute by
- NSIS 头文件介绍_WordFunc.nsh(3)
- Koa2实现电影微信公众号前后端开发学习视频
- 电脑默认字体如何进行替换教学
- CEF 、chromium源码下载前相关代理配置
- 正则表达式匹配字符串(scala)
- 元宇宙的起源·你了解多少
- java从入门到精通二十三(Servlet)
- 风险投资与经营者 分成利润