直接上代码吧:

//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))
}