这一章继续看 go 语言中内置的接口。
在 image
包中定义了 Image
接口:
package image
type Image interface {
ColorModel() color.Model // 颜色模式,比较经典的就是 RGB
Bounds() Rectangle // 图片的框
At(x, y int) color.Color // 图片某个像素点的颜色
}
看个调用的实例:
package main
import (
"fmt"
"image"
)
func main() {
m := image.NewRGBA(image.Rect(0, 0, 100, 100)) // 颜色模式,图片框大小
fmt.Println(m.Bounds()) // 打印图片的框
fmt.Println(m.At(0, 0).RGBA()) // 打印图片某个像素点的颜色
}
来实战实现一个自定义的 Image
接口,这个代码可以在这个网址中运行,因为它调用了一个自定义的包:
package main
import (
"image"
"image/color"
"golang.org/x/tour/pic"
)
type Image struct{} // 声明 Image
func (img Image) ColorModel() color.Model { // 实现 ColorModel,返回 RGBAModel
return color.RGBAModel
}
func (img Image) Bounds() image.Rectangle { // 返回图片大小,可以自定义
return image.Rect(0, 0, 255, 255)
}
func (img Image) At(x, y int) color.Color { // 返回每个点的颜色,可以用于绘图
v := uint8(x ^ y)
return color.RGBA{v, v, 255, 255}
}
func main() {
m := Image{} // 初始化
pic.ShowImage(m)
}
ok,我们展示了多种官方源码里怎么使用接口的示例,更好的感受接口 interface 在实际开发中的应用。
关于接口 interface 的内容就结束了。go 语言中没有类的概念,如果要采用面向对象编程的思想,就需要借助接口 interface 来实现,这也是大部分 go 框架中使用的模式。
下一章我们继续探索 go 语言。