Article

Golang 基础 4

关于go里的解析

Go标准库只提供encoding/json,其他格式由社区各自实现,不存在官方统一方案。

如YAML、TOML、Properties等。

接口

接口类型变量可以存储任何实现了该接口的类型对应的值,

Go的接口实现是静态度的,指编译器在编译时就确定了类型是否满足接口要求,跟结构体额外定义了几个方法无关。

这也是Go设计哲学的体现:组合优于继承。

Go没有“继承”概念,只有“实现”和“组合”。

如果想访问结构体中某个额外的方法,必须把变量类型断言回具体类型。

mw = w.(MyWriter)
mw.Close()

迭代器

go里的迭代器的风格是:range over func

func Fib(n int) func(yield func(int) bool) {
	a, b, c := 0, 1, 1
	return func(yield func(int) bool) {
		for range n {
			if !yield(a) {
				return
			}
			a, b = b, c
			c = a + b
		}
	}
}

上面的是推送式迭代器

然后,我们可以采用拉取式迭代器来主动获取序列元素,涉及两个函数:next()和stop()

func main() {
	n := 10
	next, stop := iter.Pull(Fib(n))
	defer stop()
	for {
		fib, ok := next()
		if !ok {
			break
		}
		fmt.Println(fib)
	}
}