Golang面试题整理
hanpy

常见的面试题整理,来源是各个地方…

1. Go有那些数据类型

1
2
基础类型:整型、浮点型、布尔型、字符串、字符 
复合类型:数组、切片、map、指针、channel

2. 方法与函数的区别

在Go语言中函数是一等公民,可以赋值给变量也可以在函数间传递,函数是不属于任何自定义结构的的。方法必须有接收者才可以

3. 方法是值接收者和是指针接收者的区别

值类型的接收者,无论调用者是对象还是指针对象,修改数据对调用者是没有影响的
指针类型的接收者,无论调用者是对象还是指针对象,修改数据都会影响调用者

4. 函数返回局部变量的指针是否安全?

一般来说局部变量会在函数返回之后销毁,因此被返回的引用就成为了”无所指”的引用。不过这样的情况在go语言中是安全的,Go 编译器将会对每个局部变量进行逃逸分析。如果发现局部变量的作用域超出该函数,则不会将内存分配在栈上,而是分配在堆上,因为他们不在栈区,即使释放函数,其内容也不会受影响。

5. 函数参数传递到底是值传递还是引用传递?

Go语言中所有的参数传递都是值传递,都是一个副本、一个拷贝
所有传给函数的参数值都会被复制,函数在其内部使用的并不是参数值的原值,而是它的副本。
值类型,所以每一次复制都会拷贝它,以及它的所有元素值。
引用类型,比如:切片、字典、通道,像上面那样复制它们的值,只会拷贝它们本身而已,并不会拷贝它们引用的底层数据。也就是说,这时只是浅表复制,而不是深层复制。

6. 内置函数make和new的区别?

变量的初始化是分为两个步骤的,声明和分配内容。var是用来声明的,new和make是用来分配内存的。
var声明值类型会自动分配内存,如果是引用类型是不会自动分配内存的,默认是nil。
new可以给任意类型分配内存,返回值是一个指向该类型的指针
make函数只能给slice、map、channel分配内存,返回值是类型本身

7. 设置GOPATH的意义

可以把GOPATH理解为Go语言的工作目录,它可以是一个目录也可以是多个目录,每个目录都代表一个工作区,利用这些工作区来放置Go的源码文件,编译之后生成的文件,还有安装后的归档文件