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

161 篇文章 12 订阅

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

1、cgo了解么?

Go提供的标准库,支持Go程序与C的类库交互操作,Go代码中加入【import “C”】语句就可以启动CGO特性。

2、make为什么不能返回指针?

make只支持slice、map、channel三种类型,某种意义上也可算作引用类型,返回引用类型的指针相较于直接使用引用本身并无优势可言,还需多使用一块儿内存保存指针,就好像使用整型变量,只会直接定义使用,而不是使用new创建。

指针能减少函数参数和返回的变量拷贝,slice、map、channel底层数据保存在指针类型中,基本不会出现大批量拷贝的情况,Go函数返回指针还涉及到内存逃逸分析,相较于此,引用显得轻量,不是任何情况下地址传递都是值得的。

对于引用类型主要在需更新数据时使用指针,Go没有构造函数,new创建返回的是变量指针,只会初始化零值,对于slice、map、channel这种引用类型的创建,只会创建出来一个指向nil的指针。

3、GORM了解么?

ORM(Object-Relationl Mapping)的作用是映射数据库和对象之间的关系,方便在实现数据库操作时不用写复杂的sql语句,把对数据库的操作上升到对于对象的操作,GORM就是基于Go实现的ORM库。

4、GIN的Handler底层数据结构?

Handler是请求的处理对象,需实现ServeHTTP方法,ServeHTTP执行的是业务逻辑,一般定义的func(w http.ResponseWriter, r *http.Request)的方法需要经过http.HandlerFunc包装为Handler对象。

Handler数据结构如下:

// Handler接口
type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

// HandlerFunc实现了Handler接口
type HandlerFunc func(ResponseWriter, *Request)
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
    f(w, r)
}

Handler函数是具有func(w http.ResponseWriter, r *http.Requests)签名的函数,需要经过HandlerFunc函数包装,否则不能作为路由的Handler对象,HandlerFunc实现了ServeHTTP接口方法的函数。

5、GRPC相对于RESTFUL有什么优势?

RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可进行通信,且遵从server/client模型,客户端使用RPC调用server端提供的接口时就像是调用本地的函数一样。

GRPC和Restful API都提供一套通信机制,用于server/client模型通信,且都使用HTTP作为底层传输协议,严格来讲,GRPC使用的HTTP2.0,而Restful API则不一定),GRPC特有的优势如下:

  1. GRPC可以通过Protobuf来定义接口,可以有更加严格的接口约束条件,支持多种语言。

  2. Protobuf可以将数据序列化为二进制编码,这会大幅减少需要传输的数据量,从而大幅提高传输速度。

  3. GRPC可以支持streaming流式通信(HTTP2.0),提高传输速度。

6、Protobuf了解下?

Protobuf实际是一套类似Json或者XML的数据传输格式和规范,用于不同应用或进程之间进行通信时使用,相比较而言,Protobuf有如下优点:

  1. 足够简单。

  2. 序列化后体积很小:消息大小只需要XML的1/10 ~ 1/3。

  3. 解析速度快,解析速度比XML快20 ~ 100倍。

  4. 多语言支持。

  5. 更好的兼容性,Protobuf设计原则之一就是要能够很好的向下支持或向上兼容。

7、defer、return执行顺序?

多个defer执行顺序为后进先出,defer、return、返回值三者的执行逻辑应该是return最先执行,return负责将结果写入返回值中,接着defer开始执行一些收尾工作,最后函数携带当前返回值退出。

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

luyaran

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

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

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

打赏作者

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

抵扣说明:

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

余额充值