首页 > 其他分享 >Go 面试每天一篇(第 29 天)

Go 面试每天一篇(第 29 天)

时间:2022-11-10 12:31:40浏览次数:47  
标签:Println err int fmt 29 面试 func Go main

你好哇,欢迎来答题,一起来看下

1.下面的代码有什么问题?

func main() {
fmt.Println([...]int{1} == [2]int{1})
fmt.Println([]int{1} == []int{1})
}

参考答案及解析:有两处错误

  • go 中不同类型是不能比较的,而数组长度是数组类型的一部分,所以 ​​[…]int{1}​​ 和 ​​[2]int{1}​​ 是两种不同的类型,不能比较;
  • 切片是不能比较的;

2.下面这段代码输出什么?

var p *int

func foo() (*int, error) {
var i int = 5
return &i, nil
}

func bar() {
//use p
fmt.Println(*p)
}

func main() {
p, err := foo()
if err != nil {
fmt.Println(err)
return
}
bar()
fmt.Println(*p)
}
  • A. 5 5
  • B. runtime error

参考答案及解析:B。知识点:变量作用域。问题出在操作符​​:=​​​,对于使用​​:=​​​定义的变量,如果新变量与同名已定义的变量不在同一个作用域中,那么 Go 会新定义这个变量。对于本例来说,main() 函数里的 p 是新定义的变量,会遮住全局变量 p,导致执行到​​bar()​​时程序,全局变量 p 依然还是 nil,程序随即 Crash。

正确的做法是将 main() 函数修改为:

func main() {
var err error
p, err = foo()
if err != nil {
fmt.Println(err)
return
}
bar()
fmt.Println(*p)
}

这道题目引自 Tony Bai 老师的一篇文章,原文讲的很详细,推荐。https://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/

解析若有不妥之处,欢迎在留言区交流、指正!

看下今天的题目:

func main() {
v := []int{1, 2, 3}
for i := range v {
v = append(v, i)
}
}

2.下面这段代码输出什么?为什么?



答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!



所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!


如果我的文章对你有所帮助,点赞、转发都是一种支持!



Go 面试每天一篇(第 29 天)_全局变量


Go 面试每天一篇(第 29 天)_golang_02


标签:Println,err,int,fmt,29,面试,func,Go,main
From: https://blog.51cto.com/u_15289640/5840506

相关文章

  • Go 面试每天一篇(第 18 天)
    今天周一,加油!看下​​昨天的题目​​解析:1.参考答案及解析:错、对、对、错。知识点:变量的声明。1.错,x已经声明,不能使用:=;2.对;3.对,当多值赋值时,:=左边的变量无论声明与否......
  • 解决golang报错:imports github.com/go-sql-driver/mysql from implicitly required mo
    这句话的意思是,从隐式的引入模块导入的比如我使用某个第三方包,这个第三方包里面包含了mysql包我在代码里直接使用了这个mysql包,但是在go.mod里没有引入,代码里ide是不会报......
  • 《安富莱嵌入式周报》第290期:开源静电便携测试仪,开源音频功放,CAN高波特率设计,超级铁电
    往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 上周更新了一期视频教程:USB应用实战视频教程第4期:手把手玩转基......
  • 100个iOS开发面试题汇总
    ​关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的......
  • 问题 I: LC-显示器2297
    这题其实也是暴力枚举,但是不能一个数字一个数字输出,要一行一行输出,这就要对每种情况进行遍历建议还是自己写吧,一行一行输出就彳亍了,也不算难题,给代码太长了也不一定能理......
  • .NET 7 AOT 的使用以及 .NET 与 Go 互相调用
    目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#和Golang......
  • 能不能手写Vue响应式?前端面试进阶
    Vue视图更新原理Vue的视图更新原理主要涉及的是响应式相关APIObject.defineProperty的使用,它的作用是为对象的某个属性对外提供get、set方法,从而实现外部对该属性的......
  • vue面试如何准备,这几道面试题助力你拿到理想offer
    谈谈Vue和React组件化的思想1.我们在各个页面开发的时候,会产生很多重复的功能,比如element中的xxxx。像这种纯粹非页面的UI,便成为我们常用的UI组件,最初的前端组件也就仅仅......
  • react高频面试题总结(附答案)
    hooks为什么不能放在条件判断里以setState为例,在react内部,每个组件(Fiber)的hooks都是以链表的形式存在memoizeState属性中update阶段,每次调用setState,链表......
  • 老生常谈React的diff算法原理-面试版
    第一次发文章notonly(虽然)版式可能有点烂butalso(但是)最后赋有手稿研究finally看完他你有收获diff算法:对于update的组件,他会将当前组件与该组件在上次更新是对应的......