登录
首页 >  Golang >  Go问答

指向指针的指针有什么用?

来源:Golang技术栈

时间:2023-05-03 15:23:14 213浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《指向指针的指针有什么用?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

在 Go 编程语言中;指向指针的指针如何变得有用?

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

正确答案

任何数据类型的有用性取决于要解决的问题以及用于解决问题的方法。如果一个数据类型不适合这个问题,它就是不适合这个问题——没有别的了。

Go 编程语言(以及大多数其他编程语言)基于程序员可以用来构建新数据类型的 简单规则。 其中一些规则是:

  • *T: 创建一个新的数据类型,它是一个指向 T 的指针
  • [10]T: 一个 Ts 数组
  • struct { t T; u U ... }: 包含 T 作为组件的结构
  • ...

程序员可以通过组合这些简单的规则来创建复杂的数据类型。可能的数据类型的总数超过了有用的数据类型的数量。显然,存在(并且必须存在)根本没有用的数据类型。这只是构建新数据类型的规则很简单这一事实的自然结果。

该类型**T属于不太可能出现在程序中的类型。可以编写的*****T事实并不意味着这种类型必须非常有用。


最后,您的问题的答案

该类型**T通常出现在我们希望将 type 值的用户重定向到 typeT的另一个值的上下文中T,但由于某种原因,我们无法访问该值的所有用户或查找用户会花费太多时间:

  1. 我们不想复制类型的值T(出于某种原因)
  2. 我们希望所有类型值的用户T通过指针访问该值
  3. 我们希望 快速 将特定类型值的 所有 用户重定向T到另一个值

在这种情况下,使用**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
}

理论要掌握,实操不能落!以上关于《指向指针的指针有什么用?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>