GO有类似java/php那样的接口吗,有啊,在go中,对于任何数据类型,只要它的方法集合中完全包含了一个接口的全部的方法,那么他就是这个接口的实现类型。
type ServiceInter interface {
Get(id int) string
}
只要一个数据类型的方法集合中有ServiceInter接口的Get方法,那么它就一定是接口的实现类型。这是一种无侵入式的接口实现方式。这种方式还有一个专有名词,叫“Duck typing”,中文常译作“鸭子类型”。
'"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。
1、定义interface
src/project/com.struct/services/ServiceInter.go
type ServiceInter interface {
Get(id int) string
}
2、定义实现类
src/project/com.struct/services/ProductService.go
package services
type ProductService struct {
}
func (ps *ProductService) Get(id int) string {
return "单个产品内容"
}
这样我们这个ProductService的struct 实现了interface方法。
3、src/project/com.struct/appmain/main.go
package main
import (
"fmt"
"project/com.struct/services"
)
func main() {
var service services.ServiceInter = services.ProductService{}
fmt.Println(service.Get(1))
}
因为ProductService实现了ServiceInter接口的方法,所以他们是可以赋值相等的,是不是感觉很神奇
工厂模式体现接口
GO有类似java/php那样的接口吗,有啊,在go中,对于任何数据类型,只要它的方法集合中完全包含了一个接口的全部的方法,那么他就是这个接口的实现类型。
type ServiceInter interface {
Get(id int) string
}
只要一个数据类型的方法集合中有ServiceInter接口的Get方法,那么它就一定是接口的实现类型。这是一种无侵入式的接口实现方式。这种方式还有一个专有名词,叫“Duck typing”,中文常译作“鸭子类型”。
'"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。
1、定义interface
src/project/com.struct/services/ServiceInter.go
type ServiceInter interface {
Get(id int) string
}
2、定义实现类
src/project/com.struct/services/ProductService.go
package services
type ProductService struct {
}
func (ps *ProductService) Get(id int) string {
return "单个产品内容"
}
这样我们这个ProductService的struct 实现了interface方法。
3、src/project/com.struct/appmain/main.go
package main
import (
"fmt"
"project/com.struct/services"
)
func main() {
var service services.ServiceInter = services.ProductService{}
fmt.Println(service.Get(1))
}
因为ProductService实现了ServiceInter接口的方法,所以他们是可以赋值相等的,是不是感觉很神奇
工厂模式体现接口
GO有类似java/php那样的接口吗,有啊,在go中,对于任何数据类型,只要它的方法集合中完全包含了一个接口的全部的方法,那么他就是这个接口的实现类型。
type ServiceInter interface {
Get(id int) string
}
只要一个数据类型的方法集合中有ServiceInter接口的Get方法,那么它就一定是接口的实现类型。这是一种无侵入式的接口实现方式。这种方式还有一个专有名词,叫“Duck typing”,中文常译作“鸭子类型”。
'"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。
1、定义interface
src/project/com.struct/services/ServiceInter.go
type ServiceInter interface {
Get(id int) string
}
2、定义实现类
src/project/com.struct/services/ProductService.go
package services
type ProductService struct {
}
func (ps *ProductService) Get(id int) string {
return "单个产品内容"
}
这样我们这个ProductService的struct 实现了interface方法。
3、src/project/com.struct/appmain/main.go
package main
import (
"fmt"
"project/com.struct/services"
)
func main() {
var service services.ServiceInter = services.ProductService{}
fmt.Println(service.Get(1))
}
因为ProductService实现了ServiceInter接口的方法,所以他们是可以赋值相等的,是不是感觉很神奇
工厂模式体现接口