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 指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值