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