本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

面试题

一、选择题

1.关于init函数,下面说法正确的是

A. 一个包中,可以包含多个init函数
B. 程序编译时,先执行导入包的init函数,再执行本包内的init函数
C. main包中,不能有init函数
D. init函数可以被其他函数调用

参考答案:AB

2.关于main函数(可执行程序的执行起点),下面说法正确的是()

A. main函数不能带参数
B. main函数不能定义返回值
C. main函数所在的包必须为main包
D. main函数中可以使用flag包来获取和解析命令行参数

参考答案:ABCD

3.关于cap函数的适用类型,下面说法正确的是()

A. array
B. slice
C. map
D. channel

参考答案:ABD

4.关于函数声明,下面语法错误的是()

A. func f(a, b int) (value int, err error)
B. func f(a int, b int) (value int, err error)
C. func f(a, b int) (value int, error)
D. func f(a int, b int) (int, int, error)

参考答案:C

5.对于函数定义:

func add(args ...int) int {

sum :=0

for _,arg := range args {
sum += arg

}

return sum

}

下面对add函数调用正确的是()
A. add(1, 2)
B. add(1, 3, 7)
C. add([]int{1, 2})
D. add([]int{1, 3, 7}...)

参考答案:ABD

二、简答题

1.new() 与 make() 的区别?

参考答案:

相同点
make和new都是用来分配内存的,

不同点:作用的类型不一样:
make 被用来分配引用类型的内存,make常用。
new 被用来分配除了引用类型的所有其他类型的内存,new不常用

返回类型:
make:Type
new:*Type

2.Printf()、Sprintf()、Fprintf()函数的区别用法是什么?

Printf:标准输出,一般是屏幕
Fprintf:输出到文件
Sprintf:将格式化后的字符串返回

3.说说main函数和init函数?

相同点:
main函数和init函数没有参数和返回值

不同点:
main函数是程序的主入口,而且package也得是main
init函数是初始化函数,进入包或者导入包后先执行init函数,所以init函数在main函数之前执行

4.下面代码能不能正常编译?

func main() {
slice := new([]int)
slice = append(slice, 1,2,3)
fmt.Println(list)
}

答案:不能,这里需要理解new和make的区别,new出来的是指针,不能对指针进行append操作

5.说说你对闭包的理解?

首先说说什么是闭包,然后再说说闭包的特点

闭包是什么?
闭包是匿名函数与匿名函数所引用环境的组合
定义在一个函数内部的函数,闭包是将函数内部和函数外部连接起来的桥梁
闭包的特点:
让外部访问函数内部变量成为可能;
局部变量会常驻在内存中;
可以避免使用全局变量,防止全局变量污染;
有一块内存空间被长期占用,而不被释放,会造成内存泄漏

6.context包的用途

Context通常被译作上下文,它是一个比较抽象的概念,其本质,是【上下上下】存在上下层的传递,
上会把内容传递给下。

7.说说下面代码能不能正常执行?

func Sum(x,y int)(sum int,error){
sum = x + y
return sum,nil
}

答案:不能,
在函数有多个返回值时,只要有一个返回值有指定命名,其他的也必须有命名
返回值有多个的时候返回值必须加上括号
如果只有一个返回值并且有命名也需要加上括号

8.给定两个int类型的切片,将第二个添加到第一个的后面

s1 := []int{1, 2, 3}
s2 := []int{4, 5}

s1 = append(s1, s2...)

这里需要注意加...

9.说说你对go中可变参数的理解?

可变参数:函数方法的参数,可以是任意多个,一个参数可以有不确定长度的值

参数:a ...interface{}

1490人已阅读,今天你学习了吗?

添加新回复