Golang类型系统详解
Golang类型系统详解 我正在寻找一些链接来解释(希望用简单的术语)Go语言的类型系统。
我能够使用Go语言的类型系统,但我发现当我开始偏离常规路径时,我是在猜测Go语言的类型系统有哪些可能性。
示例:我尝试解决一个创建惰性斐波那契生成器的问题(如下)。
基本的斐波那契函数(fib)
func fib(n uint) uint {
if n == 0 {
return 0
} else if n == 1 {
return 1
} else {
return fib(n-1) + fib(n-2)
}
}
创建一个类型来帮助实现惰性斐波那契生成器函数。
type Func[T any] func() (T, Func[T])//doesn't need to be generic but what the heck!
生成器函数,它返回计算出的斐波那契元素和一个函数,该函数返回下一个斐波那契元素以及用于(下一个+1)等的生成器函数。
func cal_fib_elem_and_next(n uint) (uint, Func[uint]) {
return fib(n), Func[uint](func() (uint, Func[uint]) { return cal_fib_elem_and_next(n + 1) })
}
用法。
func main() {
n, next_func := cal_fib_elem_and_next(20)
fmt.Printf("elem: %d, %T\n", n, next_func)
n, next_func = next_func()
fmt.Printf("elem: %d, %T\n", n, next_func)
n, next_func = next_func()
fmt.Printf("elem: %d, %T\n", n, next_func)
n, next_func = next_func()
fmt.Printf("elem: %d, %T\n", n, next_func)
}
输出:
elem: 6765, main.Func[uint] elem: 10946, main.Func[uint] elem: 17711, main.Func[uint] elem: 28657, main.Func[uint]
我是通过尝试(猜测)得出这个解决方案的……我之前并不知道Go语言的类型系统是否能处理这种情况。
我发现,当你在常规路径上时,Go语言的类型系统有很好的文档记录,但一旦你偏离了那条常规路径……你就只能靠自己了。
更多关于Golang类型系统详解的实战教程也可以访问 https://www.itying.com/category-94-b0.html
嗯,有这份 Go 编程语言规范 - Go 编程语言,但它没有太多的阐述或简单的术语。它确实涵盖了一切。
每当我看到斐波那契数列生成器时,它通常是函数式编程教程的一部分,尽管 Go 拥有一等函数,但它并不是真正为你在纯函数式编程语言中会使用的那种编程风格而设计的。例如,它没有尾调用优化。
更多关于Golang类型系统详解的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
作为一个不熟悉函数式编程语言的人,我不太确定你寻找的是语言规范中未涵盖的哪些内容。你的示例看起来是可行的,但可能会带来巨大的性能影响。我认为你返回的闭包是一个独立的内存分配,而且正如之前提到的,Go语言没有尾调用优化。
func main() {
fmt.Println("hello world")
}


