Golang Go语言中问题请教,一个函数返回值为接口类型却返回结构体,这是为什么?
Golang Go语言中问题请教,一个函数返回值为接口类型却返回结构体,这是为什么?
如题,NewHTTP()函数返回值是一个接口,但是 return 的是一个结构体,凭什么啊?为什么这么做啊?返回值改成*HTTP 有什么区别嘛?求教
type HTTP struct {
outPool utils.OutPool
cfg HTTPArgs
checker utils.Checker
basicAuth utils.BasicAuth
}
func NewHTTP() Service {
return &HTTP{
outPool: utils.OutPool{},
cfg: HTTPArgs{},
checker: utils.Checker{},
basicAuth: utils.BasicAuth{},
}
}
type Service interface {
Start(args interface{}) (err error)
Clean()
}
更多关于Golang Go语言中问题请教,一个函数返回值为接口类型却返回结构体,这是为什么?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是很基础的东西吧
更多关于Golang Go语言中问题请教,一个函数返回值为接口类型却返回结构体,这是为什么?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
建议先了解 golang 的 duck type
只要这个 strcut 类型实现了 interface 约束的函数,那么他就可以作为这个 interface 类型返回
面向对象基础知识了,不仅 go 其他语言也是类似的
我可不可以认为这是一种约定?
lz 可以先学学 go 的 interface 的基础
然后 lz 的写法有一点问题,go 推荐 accept interfaces, return structs 。所以别返回接口
interface 类型的变量能保存实现了这个 interface 的结构体实例
知识到用时,方觉读书少
谢谢大佬们指点,大概明白了 确实基础不牢固
扎心了
新手理解下 哈哈
是不是代码不全啊?我看半天也没看出来 HTTP 结构体哪里实现了 Service 接口😭
是的。我只复制了一部分,但想来我的意思表达明白了
结构实现了接口
说明 http 实现了这个接口,他是想链式操作吧
type HTTP struct {} 肯定在其他的地方实现了 type Service interface {}