在了解iris框架的时候,经常看到有这样去写的使用一个空结构体作为接收器,来调用方法,有点好奇这样做有什么意义。
就像下图这样,使用空结构体来作为接收器调用方法
空结构体有以下几大特点,
1、不占用内存地址。
2、地址不变
首先我们知道interface定义的是抽象方法,而下面的func是它的具体实现(这个和java差不多的意思),但是我们知道,在java中interface是没有办法实例化,因为他是抽象的。那么这个操作的作用是:
首先NewEntraceRepository这个方法返回了一个空结构体的指针(该空结构体必须实现了当前interface)
然后我们只要使用NewEntraceRepository创建的变量就可以直接调用当前interface的方法。
func NewEntraceRepository()EntraceRepository {
return &entraceRepository{};
}
敲终点了@@@@
上面这段代码相当于下面
var variable_value EntraceRepository=&entraceRepository{}
疑问:为什么可以将这个空结构体赋值给interface,我们知道只有结构体实现了interface的所有方法才能这样进行赋值。
func (n bookRepository) GetBookList(m map[string]interface{})(total int,books []models.Book){
}
其实一个 struct 实现了某个接口里的所有方法,就叫做这个 struct 实现了该接口。
所以使用一个变量接收这个地址是可以直接调用的。
好了,这样确实说的有些多,有些杂乱最近这个文章的描述能力确实有些下降,能get到就get,get不到我也没有办法
go里面的struct和interface怎么更好的理解?
在我看来interface是定义一些行为,比如牛要吃草,吃草就是它的一种行为,而struct则是每个不同的牛,每个牛又不一样,每个不同的牛随着年龄增长年龄在变,当我们要改变牛的属性就要使用指针。
如果解决了你的问题,
帮我点个赞吧



