栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

初识go语言---为什么能将空struct赋值给interface,这样不空指针?

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初识go语言---为什么能将空struct赋值给interface,这样不空指针?

在了解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则是每个不同的牛,每个牛又不一样,每个不同的牛随着年龄增长年龄在变,当我们要改变牛的属性就要使用指针。

如果解决了你的问题,
帮我点个赞吧

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945493.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号