原文地址:Go面试看这里了~(十二)
1、struct是否可以比较?
Go是强类型语言,不同类型的struct不可比较,同一类型的实例值可比较,但实例不可比较,因为是指针类型。
2、go defer(for defer)调用顺序?
先进后出,后进先出。
3、select语句可用于干什么?
常用于goroutine的完美退出,监听IO操作。
4、Go =和:=的区别?
// 声明变量a
var a int
// 声明变量a并给变量a赋值
a := 1
// 赋值
a = 1
5、高效拼接字符串?
-
效率最低:可使用【+】拼接字符串。
-
效率中等:创建字符串切片([]string),使用strings.Join()一次性串联。
-
效率最高:Go提供类似Java的StringBuilder类的方式,就是buffer。
buffer使用方式如下:
package main
import (
"bytes"
"fmt"
)
func main() {
// 使用bytes.Buffer来组装字符串,不需要遍历。
// 只需要将添加的字符串放在缓存末尾即可。
// 最后调用的时候直接转成字符串就可以。
var buffer bytes.Buffer
for i := 0; i < 1000; i++ {
buffer.WriteString("a")
}
fmt.Println(buffer.String())
}
6、空 struct{} 的用途?
空struct{}的特点就是不占用内存和内存地址不变,作用如下:
-
可用于节省内存。
-
可表示对象中不需要任何数据,仅含所需方法,在调用时也并无区别。
-
使用channel但并不需要附带任何数据时可使用空struct{}。
7、init是什么时候执行?
每个包中可有多个init函数,而其它包的init是在main包init调用之前被执行,main函数最后执行即可,如有依赖的顺序关系,可在init中包含调用即可。
8、interface比较相关?
-
空interface:不可直接比较类型。
-
空interface实例,不赋值:可比较,结果为true。
-
空interface实例,赋值:类型不同、值不同的情况下为 false,只有类型和值均相等时,两个interface实例才相等。
-
带有方法的interface:interface的方法相同结果为 true,方法不同为false。
-
如果某含方法的interface实例和某空的interface实例比较,并且该实例未赋值,那么两者相等,但如对空的interface实例赋值则不相等。
9、两个nil是否可以不相等?
可以。接口(interface) 是对非接口值(例如指针,struct等)的封装,内部实现包含2个字段,类型T和值V,一个接口等于 nil,当且仅当T和V处于unset状态(T=nil,V is unset)。
至此,本次分享就结束了,后期会慢慢补充。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。