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 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!