Go語言程式設計基礎 方法與介面(四)(完結)——Stringer、Reader、Image
阿新 • • 發佈:2018-11-16
14 Stringer
fmt包中定義的Stringer是最普遍的介面之一。
type Stringer interface {
String() string
}
Stringer是一個可以用字串描述自己的型別。fmt包(還有很多包)都通過此介面來列印值。
package main
import "fmt"
type ss struct{
ii int
}
func (s ss) String() string {
return fmt.Sprintf("The number is %v.", s.ii)
}
func main() {
var tt = ss{12}
fmt.Println(tt)
}
15 錯誤
Go程式使用error值表示錯誤狀態。
與fmt.Stringer類似,error型別是一個內建介面:
type error interface {
Error() string
}
(與fmt.Stringer類似,fmt包在列印值時也會滿足error。)
函式常常會返回一個error值,呼叫程式碼應當判斷這個錯誤是否等於nil來進行錯誤處理。
i, err := strconv.Atoi("42")
if err != nil {
fmt.Printf("couldn't convert number: %v\n" , err)
return
}
fmt.Println("Converted interger:", i)
error為nil時表示成功,非nil的error表示失敗。
package main
import "fmt"
type sss struct {
xxx string
}
func (s sss) Error() string{
return fmt.Sprintf(s.xxx)
}
func fff() error{
return sss{"gagagagaga"}
}
func main() {
if msg := fff();msg != nil {
fmt.Println(msg)
}
}
16 Reader
io包制定了io.Reader介面,它表示從資料流的末尾進行讀取。
Go標準庫包含了該介面的許多實現,包括檔案、網路連線、壓縮和加密等等。
io.Reader介面有一個Read方法:
func (T) Read(b []byte) (n int, err error)
Read用資料填充給定的位元組切片並返回填充的位元組數和錯誤值。在遇到資料流的結尾時,它會返回一個io.EOF錯誤。
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("Hello, Reader!")
b := make([]byte, 8)
for {
n, err := r.Read(b)
fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
fmt.Printf("b[:n] = %q\n", b[:n])
if err == io.EOF {
break
}
}
}
17 Image
image 包定義了Image介面:
package image
type Image interface {
ColorModel() color.Model
Bounds() Rectangle
At(x, y int) color.Color
}
note:Bounds方法返回的Rectangle實際上是一個image.Rectangle,它在image包中宣告。
color.Color與color.Model型別也是介面,但通常因為直接使用預定義的實現image.RGBA與image.RGBAModel而被忽視。這些介面與型別由image/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())
}