Go 基础面试题, Go 语言中有没有 this 指针?
Go 基础面试题, Go 语言中有没有 this 指针?
QA
Step 1
Q:: Go 语言中有没有 this 指针?
A:: Go 语言中没有类似于 C++ 或 Java 中的 'this'
指针。取而代之的是,Go 使用显式的接收者(receiver)来访问结构体的方法。接收者可以是值接收者或指针接收者,取决于方法定义时的需要。
Step 2
Q:: 值接收者和指针接收者有什么区别?
A:: 值接收者是方法接收者的一个副本,对副本的修改不会影响到原始对象。指针接收者则传递的是指向对象的指针,方法内部的修改会作用于原始对象。使用指针接收者还能避免拷贝较大的结构体,提升性能。
Step 3
Q:: Go 语言中什么时候应该使用指针接收者?
A:: 当方法需要修改接收者的状态,或者接收者是一个比较大的结构体,不希望复制时,应该使用指针接收者。此外,当结构体中包含指针字段或是需要保持接口一致性时,也通常使用指针接收者。
Step 4
Q:: Go 语言中的接口是什么?如何实现接口?
A:: Go 语言中的接口是一组方法的集合。一个类型实现了接口的所有方法,就可以说这个类型实现了该接口。Go 语言通过隐式实现来支持接口,类型不需要显式声明实现了哪个接口,只需实现接口要求的方法即可。
Step 5
Q:: 如何在 Go 中避免 nil 接口引发的 panic?
A:: 为了避免 nil 接口引发的 panic,首先要确保接口指向了具体的实现。在使用接口之前,应检查其是否为 nil。如果可能为空,应使用非空指针类型或者在接口使用前进行显式判断。
Step 6
Q:: Go 语言中如何进行并发编程?
A:: Go 提供了 goroutine 和 channel 来实现并发编程。goroutine 是一种轻量级的线程,由 Go runtime 管理,通常使用 go 关键字启动。channel 是 goroutine 之间进行通信的管道,支持通过管道进行数据的安全传递。