Golang中有“final”等不变性概念吗?

在变量前面加上“final”的意义在于:变量不能重新分配其值/引用。这有助于提高代码的可读性和可预测性(IMO),因为它是不可变编程的构建块之一。

Go 有编译时常量,但它们仅限于字面“原始”值,而不是final变量。

Go 没有不可变编程概念
不变性概念实际给代码带来的影响来说却是过度的。

代码面临的真正危险不是任何形式的突变,而是意外的突变,即程序员认为在 X 行和 Y 行之间不会改变的东西实际上发生了变化:

  • 最坏的情况是一个单独的线程由于竞争条件而意外地改变了一个值。
  • 但实际上,另一个常见的表现是一个函数调用另一个函数,该函数意外地改变了某些东西。

虽然 Go 不会提供任何编译器帮助,但您绝对可以吸取有关不要失控地改变事物的经验教训并将其应用到您自己的代码中。

虽然Go 缺乏不可变代码的一些优点,但它也提供了一些优点;例如,创建 Goroutine:

  • 这些 Goroutine 本身拥有一些数据块,并由一个对象包装,该对象通过抽象与该 Goroutine 的通信来提供对它的线程安全访问。
  • 该对象的外部用户无法以不受控制的方式改变 goroutine 控制的值,但 goroutine 具有完全可变访问提供的优势。