以下是一些常见的Go语言面试问题及其解答示例,适合面试官或准备面试的开发者参考:
1. Go语言中的goroutine和线程有什么区别?
2. 解释Go中的defer关键字及其执行顺序
3. Go语言中如何实现并发安全?
4. 解释Go中的interface和空接口interface{}
- 解答:
interface定义了一组方法签名,类型实现这些方法即实现了该接口。空接口interface{}没有方法,可以存储任何类型的值。
- 示例代码:
package main
import "fmt"
type Shape interface {
Area() float64
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
func printValue(v interface{}) {
fmt.Println("Value:", v)
}
func main() {
var s Shape = Circle{Radius: 5}
fmt.Println("Area:", s.Area())
printValue(42)
printValue("hello")
}
5. Go语言中的channel是什么?如何避免死锁?
6. Go语言中new和make的区别?
7. 解释Go中的垃圾回收机制
- 解答:Go使用并发标记-清除(mark-and-sweep)垃圾回收器,自动管理内存,通过三色标记法减少暂停时间(STW)。
8. Go语言中如何高效拼接字符串?
这些问题覆盖了Go的并发、内存管理、接口等核心概念,适合评估候选人的实际编码能力和理论理解。