直接上代码吧:
//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))
}