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

86次阅读
没有评论

共计 3235 个字符,预计需要花费 9 分钟才能阅读完成。

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

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

package main
 size :=1024
 max_size = size*2
func main() { println(size,max_size)
}

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

结果:

syntax error: unexpected :=

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

package main
const cl = 100
var bl = 123
func main() { println( bl,bl)
 println(cl,cl)
}

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

cannot take the address of cl

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

package main
func 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 int
 type MyInt2 = int
 var i int =9
 var i1 MyInt1 = i
 var i2 MyInt2 = i
 fmt.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 MyUser1
 var i2 MyUser2
 i1.m1()
 i2.m2()}

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

i1.m2()

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

MyUser1.m1
User.m2

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

package main
import  fmt 
type T1 struct {func (t T1) m1(){ fmt.Println( T1.m1)
type T2 = T1
type MyStruct struct {
 T1
 T2
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 main
import (
  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 string
 if reallyDoIt { result, err = tryTheThing()
 if err != nil || result !=  it worked  {
 err = ErrDidNotWork
 }
 }
 return err
}

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

package main
func 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:=i
 funs = append(funs, func() { println( x,x)
 })
 }
 return funs
}

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

package main
func 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 main
import (
  fmt 
func main() { defer func() { if err:=recover();err!=nil{ fmt.Println(err)
 }else { fmt.Println( fatal)
 }
 }()
 defer func() { panic( defer panic)
 }()
 panic(panic)
}

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3235字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)