在围棋编程语言中,指向指针的指针如何变得有用?

(如果它们不是真的有用,为什么它们不是非法的?)

推荐答案

任何数据类型的有用性取决于要解决的问题和用于解决问题的方法.如果一种数据类型不适合问题,那么它就不适合问题--也就没有别的了.

围棋编程语言(以及大多数其他编程语言)基于程序员可以用来构建新数据类型的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的值,但由于某些原因,我们无法访问该值的所有用户,或者查找用户会花费太多时间:

  1. 我们不想复制类型为T的值(由于某些原因)
  2. 我们希望类型为T的值的所有用户通过指针访问该值
  3. 我们希望quickly将类型为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
}

Go相关问答推荐

在连接表中以添加字段作为主要关键字的多对多

Go:嵌入类型不能是类型参数""

如何修复Go中调用GetRawInputDeviceInfA Windows API函数时的错误?

验证访问令牌(密钥罩)

Golang SDK for DynamoDB:ReturnValuesOnConditionCheckFailure在条件chcek失败发生时不返回条件的详细信息

如何将 goose 迁移与 pgx 一起使用?

在 Go 中解组编号的 XML 标签

无法使用带有 422 的 go-github 创建提交 - 更新不是快进

Golang 网络应用程序安全性:您是否应该判断输入是否为有效的 utf-8?

尽管存在 WaitGroup,Goroutines 似乎被打断了

在 Cloud Run 中找不到默认凭据

由于 main.go 文件中的本地包导入导致构建 docker 容器时出错

golang yaml 马歇尔网址

go - 仅在函数即将返回错误时清理资源

Go http.FileServer 给出意外的 404 错误

Golang prometheus 显示自定义指标

将 CSVExport 函数传递给处理程序 Gin

Dynamodb.ScanInput - 不能使用expr.Names()(类型 map[string]*string)作为类型 map[string]string

Golang 'defer' 导致发送(接收)API 响应延迟

如何允许可转换为指针的泛型类型参数化另一种可转换为指针的泛型类型?