Go 之基础速学 (十) golang 里接口的实现
接口,大家都熟悉,php、java当中都有这么个概念,interface关键词,golang里面也是如此!
但是golang里面接口的实现和php当中还是有区别的,原理性质都一样,只不过写法不同罢了!
下边我们来介绍一下如何实现接口?
直接上代码吧:
//IService.go文件: package services //就这么简单 声明接口 interface type IService interface { //定义要实现的方法 Get(id int) string 必须传参为int类型 返回值为string类型 实现了该接口的结构体必须要实现里面的方法 Get(id int) string }
//IServiceOne.go文件: package services type IServiceOne struct { } //结构体当中实现Get(id int) stirng方法 func (one IServiceOne) Get(id int) string { return "单挑新闻内容one" }
//IServiceTwo.go文件 package services type IServiceTwo struct { } //结构体当中实现Get(id int) stirng方法 func (two IServiceTwo) Get(id int) string { return "单挑新闻内容two"; }
看完上边的代码是不是懵逼了啊?第一个文件是接口文件第二个第三个文件是实现了接口里面的方法Get(id int) string 但是三者的联系是什么呢?也没看到第二个和第三个文件去实现接口啊?如何去用呢?
这么用,看代码和注释:package main import ( "com.huxiaobai/services" "fmt" "github.com/pquerna/ffjson/ffjson" ) func main(){ //接口的实现 案例一 //接口更多的要理解为一种规范,必须实现接口里面的方法,起到规范化的作用,除此也没啥别的作用,和php一样! var service services.IService = services.IServiceOne{} //如果 func (one *IServiceOne) Get(id int) string {} 结构体里面的方法要求传入的是指针 那么我们这里调用的时候也需要传入指针 这也是我们所提倡的写法 因为这样可以改变结构体里面的值并且可以同步 上边的写法是重新塞入了一个对象无法同步属性值 //var service services.IService = new(services.IServiceOne) //或者写成如下所示也是一样的 //var service services.IService = &services.IServiceOne fmt.Println(service.Get(12)) }
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: