大家好,今天来为大家分享深入解析Golang编程语言中的接口特性的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
接口
根据《Go 语言中的方法,接口和嵌入类型》的描述可以看出,接口调用该结构体的方法时,需要区分接收者,即:
当接收者是指针*T时,接口实例必须是指针。当接收者是值T时,接口强度可以是指针或值。接口的定义和类型转换都与接收者的定义有关。文章中的例子是通过接口显示为函数参数,这里我直接使用变量来进行实验:
包主
导入“fmt”
typeType struct {
名称字符串
}
类型PType 结构{
名称字符串
}
类型接口iInterface {
邮政()
}
//接收者不是指针
func (t 类型) post() {
fmt.Println("POST")
}
//接收者是一个指针
func (t *PType) post() {
fmt.Println("POST")
}
函数主函数()
{
变种国际米兰
//var it *Inter //接口不能定义为指针
pty :=新的(类型)
ty :={"类型"}
it=ty //将变量赋值给接口,OK
it.post() //接口调用方法,OK
it=pty //将指针变量赋值给接口,OK
it.post() //接口调用方法,OK
pty2 :=新的(P类型)
ty2 :={"ptype"}
it=ty2 //将变量赋值给接口,错误
it.post() //接口调用方法,错误
it=pty2 //将指针变量赋值给接口,OK
it.post() //接口调用方法,OK
}你看到的情况和文章中作为参数使用的接口一模一样。
根据规定,接口不能定义为指针。我曾经尝试将接口定义为指针,但是提示:
无法使用用户(用户类型)作为类型*Interface 分配:
*Interface是指向接口的指针,而不是接口
以失败告终。就我个人而言,我从C++ 经验中理解接口。接口本身是一个引用,声明指向引用的指针是非法的。 C++中会出现如下编译错误:
error: 无法声明指向“int”的指针
成功的直接调用变量和指针应该是golang内部类型的隐藏转换。
进一步探索发现,将指针指定的接口转换为指针是成功的pty=t.(*Type),但将指针指定的接口转换为普通值类型会出现以下错误:
panic:接口转换: main.Inter是*main.Type,不是main.Type
同样,通过赋值直接将接口转换为指针pty=t.(Type) 也会导致错误。这或许证明了接口是一个引用的推论,同时也表明它不是一个简单的指针。
这让我想起了C++中虚函数的多态性。如果要使用多态性,实例化的对象必须是指针或引用。
函数
根据实验参数传递,与C/C++基本相同。毕竟,go 和c 只是“同父异母”(:-p)。也就是说,所有参数都是按值传递的,指针和引用都指向相同的内容,因为副本指向它们,所以修改它们的内容也会引起原始数据的改变。因此,golang中函数需要对数据进行修改需要通过指针类型进行数据传递与函数参数传递相同。如果接收者是值类型数据,则只会修改其副本,不会影响其原始数据。
由此可以理解为接收者实际传递的是一个参数,它的传递方式同样是复制OK,我们就从这些开始吧。我会根据自己的理解进一步补充和修改内容。如有错误,请指出。
csdn博客换成Markdown编辑器,写文章感觉好多了!
好了,关于深入解析Golang编程语言中的接口特性和的问题到这里结束啦,希望可以解决您的问题哈!
【深入解析Golang编程语言中的接口特性】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
最近在学Go语言,发现它的接口系统挺有意思的!
有17位网友表示赞同!
想了解一下Golang接口的使用场景,比如它在实际项目中怎么应用?
有17位网友表示赞同!
Golang接口的灵活性和安全性怎么样?跟其他语言接口相比有哪些优势?
有11位网友表示赞同!
听说golang接口可以实现多态,这确实很吸引我想要深入学习!
有7位网友表示赞同!
正在准备面试,希望能学习一些关于Golang接口的常见考题和解答思路。
有7位网友表示赞同!
感觉接口定义非常简洁明了,很容易理解golang是如何实现其功能
有11位网友表示赞同!
我想知道如何使用接口实现抽象类或者模板方法模式?
有5位网友表示赞同!
是不是所有的类型都能构成Golang接口呢?有哪些需要注意的地方?
有12位网友表示赞同!
想了解一下Golang接口的优缺点,以及在实际开发中的一些局限性。
有10位网友表示赞同!
我最近遇到一个项目需求需要使用接口,不知道Golang实现起来会比较方便吗?
有18位网友表示赞同!
可以分享一些优秀的Golang代码范例,尤其是关于接口的使用案例?
有17位网友表示赞同!
想学习如何进行单元测试时,怎么更有效地测试基于Golang接口的代码?
有14位网友表示赞同!
golang接口支持多版本兼容吗?如何实现不同的功能接口?
有15位网友表示赞同!
在 Golang 开发中,接口设计和维护对软件的可扩展性有什么帮助?
有15位网友表示赞同!
学习golang开发过程中遇到的什么问题可以利用接口来解决?
有8位网友表示赞同!
Golang接口是否支持反射机制?
有14位网友表示赞同!
有没有什么工具可以方便地生成Golang接口文档?
有6位网友表示赞同!
想要了解Golang接口与结构体之间的关系,它们是如何相互作用的?。
有9位网友表示赞同!