1. 程式人生 > >Go語言程式設計基礎 方法與介面(四)(完結)——Stringer、Reader、Image

Go語言程式設計基礎 方法與介面(四)(完結)——Stringer、Reader、Image

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())
}

學習源:Go 指南