学堂 学堂 学堂公众号手机端

2022年Go语言的最新面试题有哪些

lewis 1年前 (2024-04-06) 阅读数 5 #技术

这篇文章主要介绍了2022年Go语言的最新面试题有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇2022年Go语言的最新面试题有哪些文章都会有所收获,下面我们一起来看看吧。

1、编译执行下面代码会出现什么?

packagemain
var(
size:=1024
max_size=size*2
)
funcmain(){
println(size,max_size)
}

解析 考点:变量简短模式 变量简短模式限制: - 定义变量同时显式初始化 - 不能提供数据类型 - 只能在函数内部使用


结果:

syntaxerror:unexpected:=

2、下面函数有什么问题?

packagemain
constcl=100

varbl=123

funcmain(){
println(&bl,bl)
println(&cl,cl)
}

解析 考点:常量 常量不同于变量的在运行期分配内存,常量通常会被编译器在预处理阶段直接展开,作为指令数据使用,

cannottaketheaddressofcl

3、编译执行下面代码会出现什么?

packagemain

funcmain(){

fori:=0;i<10;i++{
loop:
println(i)
}
gotoloop
}

解析 考点:goto goto不能跳转到其他函数或者内层代码

gotoloopjumpsintoblockstartingat

4、编译执行下面代码会出现什么?

packagemain
import"fmt"

funcmain(){
typeMyInt1int
typeMyInt2=int
variint=9
vari1MyInt1=i
vari2MyInt2=i
fmt.Println(i1,i2)
}

解析 考点:Go 1.9 新特性 Type Alias 基于一个类型创建一个新类型,称之为defintion;基于一个类型创建一个别名,称之为alias。 MyInt1为称之为defintion,虽然底层类型为int类型,但是不能直接赋值,需要强转; MyInt2称之为alias,可以直接赋值。

结果:

cannotusei(typeint)astypeMyInt1inassignment

5、编译执行下面代码会出现什么?

packagemain
import"fmt"

typeUserstruct{
}
typeMyUser1User
typeMyUser2=User
func(iMyUser1)m1(){
fmt.Println("MyUser1.m1")
}
func(iUser)m2(){
fmt.Println("User.m2")
}

funcmain(){
vari1MyUser1
vari2MyUser2
i1.m1()
i2.m2()
}

解析 考点:Go 1.9 新特性 Type Alias 因为MyUser2完全等价于User,所以具有其所有的方法,并且其中一个新增了方法,另外一个也会有。 但是

i1.m2()

是不能执行的,因为MyUser1没有定义该方法。 结果:

MyUser1.m1
User.m2

6、编译执行下面代码会出现什么?

packagemain

import"fmt"

typeT1struct{
}
func(tT1)m1(){
fmt.Println("T1.m1")
}
typeT2=T1
typeMyStructstruct{
T1
T2
}
funcmain(){
my:=MyStruct{}
my.m1()
}

**解析 考点:Go 1.9 新特性 Type Alias ** 是不能正常编译的,异常:

ambiguousselectormy.m1

结果不限于方法,字段也也一样;也不限于type alias,type defintion也是一样的,只要有重复的方法、字段,就会有这种提示,因为不知道该选择哪个。 改为:

my.T1.m1()
my.T2.m1()

type alias的定义,本质上是一样的类型,只是起了一个别名,源类型怎么用,别名类型也怎么用,保留源类型的所有方法、字段等。

7、编译执行下面代码会出现什么?

packagemain

import(
"errors"
"fmt"
)

varErrDidNotWork=errors.New("didnotwork")

funcDoTheThing(reallyDoItbool)(errerror){
ifreallyDoIt{
result,err:=tryTheThing()
iferr!=nil||result!="itworked"{
err=ErrDidNotWork
}
}
returnerr
}

functryTheThing()(string,error){
return"",ErrDidNotWork
}

funcmain(){
fmt.Println(DoTheThing(true))
fmt.Println(DoTheThing(false))
}

解析 考点:变量作用域 因为 if 语句块内的 err 变量会遮罩函数作用域内的 err 变量,结果:

<nil>
<nil>

改为:

funcDoTheThing(reallyDoItbool)(errerror){
varresultstring
ifreallyDoIt{
result,err=tryTheThing()
iferr!=nil||result!="itworked"{
err=ErrDidNotWork
}
}
returnerr
}

8、编译执行下面代码会出现什么?

packagemain

functest()[]func(){
varfuns[]func()
fori:=0;i<2;i++{
funs=append(funs,func(){
println(&i,i)
})
}
returnfuns
}

funcmain(){
funs:=test()
for_,f:=rangefuns{
f()
}
}

解析 考点:闭包延迟求值 for循环复用局部变量i,每一次放入匿名函数的应用都是想一个变量。 结果:

0xc0420460002
0xc0420460002

如果想不一样可以改为:

functest()[]func(){
varfuns[]func()
fori:=0;i<2;i++{
x:=i
funs=append(funs,func(){
println(&x,x)
})
}
returnfuns
}

9、编译执行下面代码会出现什么?

packagemain

functest(xint)(func(),func()){
returnfunc(){
println(x)
x+=10
},func(){
println(x)
}
}

funcmain(){
a,b:=test(100)
a()
b()
}

解析 考点:闭包引用相同变量 结果:

100
110

10、编译执行下面代码会出现什么?

packagemain

import(
"fmt"
)

funcmain(){
deferfunc(){
iferr:=recover();err!=nil{
fmt.Println(err)
}else{
fmt.Println("fatal")
}
}()

deferfunc(){
panic("deferpanic")
}()
panic("panic")
}

关于“2022年Go语言的最新面试题有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“2022年Go语言的最新面试题有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注博信行业资讯频道。

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门