go语言接口使用
2013-09-02 14:40
691 查看
/article/8490005.html
下面为大家带来go语言三种接口使用模式,代码基于go1.0.2版本
第一种:
[java] view
plaincopyprint?
package main
import "fmt"
type Writer interface {
Write(data []byte) (int, error)
}
type writerImpl struct {
}
func (w *writerImpl) Write(data []byte) (int, error) {
return len(data), nil
}
type Worker struct {
Writer
}
func main() {
worker := Worker{&writerImpl{}}
// using by inteface
n, err := worker.Write(nil)
if err != nil {
panic(err)
}
fmt.Println(n)
}
注意,上面的 worker := Worker{&writerImpl{}} 很难理解,这里不是对一个类型取地址,而是用writerImpl生成一个
匿名对象,并对这个匿名对象取地址,writerImpl后面的{}是初始化时啥也没传
第二种:
[java] view
plaincopyprint?
package main
import "fmt"
type Writer interface {
Write(data []byte) (int, error)
}
func New() Writer {
return &writer{}
}
type writer struct {
}
func (w *writer) Write(data []byte) (int, error) {
return len(data), nil
}
func main() {
worker := New()
// using by inteface
n, err := worker.Write(nil)
if err != nil {
panic(err)
}
fmt.Println(n)
}
第三种:
[java] view
plaincopyprint?
package main
import "fmt"
type Writer interface {
Write(data []byte) (int, error)
}
func New() *writer {
return &writer{}
}
type writer struct {
}
func (w *writer) Write(data []byte) (int, error) {
return len(data), nil
}
func main() {
worker := New()
// using by inteface
n, err := worker.Write(nil)
if err != nil {
panic(err)
}
fmt.Println(n)
}
下面为大家带来go语言三种接口使用模式,代码基于go1.0.2版本
第一种:
[java] view
plaincopyprint?
package main
import "fmt"
type Writer interface {
Write(data []byte) (int, error)
}
type writerImpl struct {
}
func (w *writerImpl) Write(data []byte) (int, error) {
return len(data), nil
}
type Worker struct {
Writer
}
func main() {
worker := Worker{&writerImpl{}}
// using by inteface
n, err := worker.Write(nil)
if err != nil {
panic(err)
}
fmt.Println(n)
}
注意,上面的 worker := Worker{&writerImpl{}} 很难理解,这里不是对一个类型取地址,而是用writerImpl生成一个
匿名对象,并对这个匿名对象取地址,writerImpl后面的{}是初始化时啥也没传
第二种:
[java] view
plaincopyprint?
package main
import "fmt"
type Writer interface {
Write(data []byte) (int, error)
}
func New() Writer {
return &writer{}
}
type writer struct {
}
func (w *writer) Write(data []byte) (int, error) {
return len(data), nil
}
func main() {
worker := New()
// using by inteface
n, err := worker.Write(nil)
if err != nil {
panic(err)
}
fmt.Println(n)
}
第三种:
[java] view
plaincopyprint?
package main
import "fmt"
type Writer interface {
Write(data []byte) (int, error)
}
func New() *writer {
return &writer{}
}
type writer struct {
}
func (w *writer) Write(data []byte) (int, error) {
return len(data), nil
}
func main() {
worker := New()
// using by inteface
n, err := worker.Write(nil)
if err != nil {
panic(err)
}
fmt.Println(n)
}
相关文章推荐
- GO语言(六)接口使用
- go语言接口使用
- Go语言中使用MySql数据库
- 关于go语言的学习和使用
- go语言中的接口interface
- 9.笔记go语言——方法和接口
- GO语言LiteIDE的安装使用
- 19.笔记go语言——使用Mysql驱动
- go语言之beego框架orm的使用
- go语言中的接口类型与反射
- MongoDB的Go语言驱动----mgo的使用指南
- Go语言 IDE之Gogland配置使用
- go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui
- go语言之beego框架orm的使用(二)
- Go语言 IDE之Gogland配置使用
- go语言中的反射的使用
- 在go语言里使用thrift做远程通讯
- 神奇的GO语言:空接口(interface)
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.3 资源控制器
- Go语言中接口的定义与实现