任何数据类型的有用性取决于要解决的问题和用于解决问题的方法.如果一种数据类型不适合问题,那么它就不适合问题--也就没有别的了.
围棋编程语言(以及大多数其他编程语言)基于程序员可以用来构建新数据类型的simple条规则.其中一些规则包括:
*T
:创建一个指向T的指针的新数据类型[10]T
:t数组struct { t T; u U ... }
:包含T作为组件的 struct 程序员可以通过编写这些简单的规则来创建复杂的数据类型.可能的数据类型总数超过了有用的数据类型数量.显然,存在(并且必须存在)根本没有用处的数据类型.这只是构建新数据类型的规则很简单这一事实的自然结果.
类型**T
属于较不可能出现在节目中的类型类别.可以编写*****T
这一事实并不意味着这样的类型一定非常有用.
And finally, the answer to your question:
类型**T
通常出现在以下上下文中:我们希望将类型为T
的用户重定向到另一个类型为T
的值,但由于某些原因,我们无法访问该值的所有用户,或者查找用户会花费太多时间:
T
的值(由于某些原因)T
的值的所有用户通过指针访问该值T
的特定值的all个用户重定向到另一个值在这种情况下,使用**T
是很自然的,因为它允许我们实现O(1)中的第三个步骤:
type User_of_T struct {
Value **T
}
// Redirect all users of a particular value of type T
// to another value of type T.
func (u *User_of_T) Redirect(t *T) {
*(u.Value) = t
}