Golang(Go 语言)入门学习-10-错误,数据读取与图像
2018-03-30 20:52
1386 查看
版权声明:欢迎联系我转载!欢迎交流分享!转载和分享请注明出处! https://blog.csdn.net/u014303046/article/details/79763052
1. 错误
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 integer:", i)
error 为 nil 时表示成功;非 nil 的 error 表示失败。
package main import ( "fmt" "time" ) type MyError struct { When time.Time What string } func (e *MyError) Error() string { return fmt.Sprintf("at %v, %s", e.When, e.What) } func run() error { return &MyError{ time.Now(), "it didn't work", } } func main() { if err := run(); err != nil { fmt.Println(err) } }
输出
at 2009-11-10 23:00:00 +0000 UTC m=+0.000000001, it didn't work
2. Reader
io 包指定了 io.Reader 接口,它表示从数据流的末尾进行读取。
Go 标准库包含了该接口的许多实现,包括文件、网络连接、压缩和加密等等。
io.Reader 接口有一个 Read 方法:
func (T) Read(b []byte) (n int, err error)
Read 用数据填充给定的字节切片并返回填充的字节数和错误值。在遇到数据流的结尾时,它会返回一个 io.EOF 错误。
示例代码创建了一个 strings.Reader 并以每次 8 字节的速度读取它的输出。
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 } } }
输出
n = 8 err = <nil> b = [72 101 108 108 111 44 32 82] b[:n] = "Hello, R" n = 6 err = <nil> b = [101 97 100 101 114 33 32 82] b[:n] = "eader!" n = 0 err = EOF b = [101 97 100 101 114 33 32 82] b[:n] = ""
3. 图像
image 包定义了 Image 接口:
package image type Image interface { ColorModel() color.Model Bounds() Rectangle At(x, y int) color.Color }
注意: 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()) }
输出
(0,0)-(100,100) 0 0 0 0
相关文章推荐
- go语言学习-golang的基本数据类型
- go语言学习笔记(10) 错误处理
- go语言学习-golang的基本数据类型
- Golang 入门系列(二)学习Go语言需要注意的坑
- 数据处理的两个基本问题02 - 零基础入门学习汇编语言39
- 【golang】Go语言学习-select用法
- 数据处理的两个基本问题04 - 零基础入门学习汇编语言41
- GO语言入门到精通(二)Golang编译器搭建
- Go语言学习笔记之基本数据类型
- go语言学习-在ubuntu上安装golang
- Go/Golang 语言学习笔记总结
- 用python读取cifar-10与cifar-100图像数据
- R语言入门视频笔记--10--数据挖掘
- 深度学习,制作类似cifar10图像数据集
- GO语言入门学习网站
- go语言学习:web服务器 golang版
- Android入门学习笔记(一)|基础知识|文件数据存储读取|解析XML
- 【GOLANG】Go语言学习-logger
- go语言学习-数据类型
- 分享| Go语言(golang)的认识,跟学习资料及其开发工具