go lang 中的函数,有人可以帮我分解一下吗?

Functions in go lang, can someone please break this down for me?

当我偶然发现闭包时,我正在参观 golang,一件事导致另一件事,我降落在 https://www.calhoun.io/5-useful-ways-to-use-closures-in-go/

这里我被代码片段难住了

func makeFibGen() func() int {
  f1 := 0
  f2 := 1
  return func() int {
    f2, f1 = (f1 + f2), f2
    return f1
  }
}

有人可以给我分解一下并解释到底是怎么回事吗? 特别是这一行:

f2, f1 = (f1 + f2), f2

f2 被赋值 f1 + f2,同时 f1 被赋值(原始值)f2。因此,如果 f1, f2 之前是 3, 5,那么之后它们将是 5, 8 (5, (3 + 5))。

这样,我们就得到了一个斐波那契生成器,因为每次调用内部函数时,都会返回前两个值的总和,并与前一个数字中较大的一个一起保存以备下次使用,构建下一个将它们加在一起将产生下一个斐波那契数,依此类推。