Q6.什么是闭包
函数闭合是一个函数值,它从其主体之外引用变量。该函数可以访问并为被引用的变量赋值。例如:adder()返回一个闭包,每个闭包都与它自己引用的sum变量绑定。
package main import "fmt" func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum } } func main() { pos, neg := adder(), adder() for i := 0; i < 10; i++ { fmt.Println(pos(i)) fmt.Println(neg(2 * i)) } }
Q7.解释Golang中并发和并行的区别。
并发性是指你的程序可以同时处理多个任务,而并行性是指你的程序可以使用多个处理器同时执行多个任务。换句话说,并发性是一个程序的属性,它允许你有多个任务同时进行,但不一定同时执行。并行性是一种运行时的属性,两个或多个任务同时执行。因此,并行性可以是实现并发性属性的一种手段,但它只是你可用的众多手段之一。Golang中并发性的关键工具是goroutines和通道。goroutines是并发的轻量级线程,而通道允许goroutines在执行过程中相互通信。
Q8.解释我们何时使用break Statement、continue Statement和go Statement。
- Break语句: 它用于终止switch语句或for循环,并将执行转移到switch语句或for循环后的下一条语句。
- continue语句: 它使循环更容易跳过其主体的其余部分,并在重复之前立即重新评估自己的状态。
- Go 语句: 利用这一点,控制权被转移到标注的语句中。
Q9.Go有运行时间吗?
Go确实有一个广泛的库,称为运行时,它是每个Go程序的一部分。运行时库实现了垃圾收集、并发、堆栈管理以及 Go 语言的其他关键功能。虽然它是语言的核心,但Go的运行时类似于libc,即C语言库。然而,重要的是要理解Go的运行时不包括虚拟机,如Java运行时所提供的虚拟机。Go程序被提前编译为本地机器代码(或JavaScript或WebAssembly,用于某些变体实现)。因此,虽然这个词经常被用来描述程序运行的虚拟环境,但在Go中,"运行时 "这个词只是提供关键语言服务的库的名称。
Q10.Go中的垃圾收集器是如何工作的?
Go垃圾收集器可以帮助开发者在不再需要内存时自动释放其程序的内存。然而,对内存的跟踪和清理可能会影响我们程序的性能。Go垃圾收集器就是为了实现这些目标而设计的。
- 尽可能减少程序停止时的两个阶段,也叫 "停止世界"。
- 垃圾收集器的周期要小于10ms。
- 垃圾收集周期不应占用超过25%的CPU。