Go面试看这里了~(十二)

161 篇文章 12 订阅

原文地址:Go面试看这里了~(十二)

1、struct是否可以比较?

Go是强类型语言,不同类型的struct不可比较,同一类型的实例值可比较,但实例不可比较,因为是指针类型。

2、go defer(for defer)调用顺序?

先进后出,后进先出。

3、select语句可用于干什么?

常用于goroutine的完美退出,监听IO操作。

4、Go  =和:=的区别?

// 声明变量avar a int// 声明变量a并给变量a赋值a := 1// 赋值a = 1

5、高效拼接字符串?

  1. 效率最低:可使用【+】拼接字符串。

  2. 效率中等:创建字符串切片([]string),使用strings.Join()一次性串联。

  3. 效率最高: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{}的特点就是不占用内存和内存地址不变,作用如下:

  1. 可用于节省内存。

  2. 可表示对象中不需要任何数据,仅含所需方法,在调用时也并无区别。

  3. 使用channel但并不需要附带任何数据时可使用空struct{}。

7、init是什么时候执行?

每个包中可有多个init函数,而其它包的init是在main包init调用之前被执行,main函数最后执行即可,如有依赖的顺序关系,可在init中包含调用即可。

8、interface比较相关?

  1. 空interface:不可直接比较类型。

  2. 空interface实例,不赋值:可比较,结果为true。

  3. 空interface实例,赋值:类型不同、值不同的情况下为 false,只有类型和值均相等时,两个interface实例才相等。

  4. 带有方法的interface:interface的方法相同结果为 true,方法不同为false。

  5. 如果某含方法的interface实例和某空的interface实例比较,并且该实例未赋值,那么两者相等,但如对空的interface实例赋值则不相等。

9、两个nil是否可以不相等?

可以。接口(interface) 是对非接口值(例如指针,struct等)的封装,内部实现包含2个字段,类型T和值V,一个接口等于 nil,当且仅当T和V处于unset状态(T=nil,V is unset)。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值