登录
首页 >  Golang >  Go问答

是否有一个通用术语用来指代 Go 中具有"引用语义"的类型,如Map、Slice和Channel?

来源:stackoverflow

时间:2024-02-24 20:18:25 139浏览 收藏

从现在开始,努力学习吧!本文《是否有一个通用术语用来指代 Go 中具有"引用语义"的类型,如Map、Slice和Channel?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

根据 Go 中的响应和评论:引用类型作为参数 Go 似乎没有“官方”称为“引用类型”的类型。

然而,有一些类型实际上保存指向底层数据的指针,这允许有效地将这些类型的值作为函数参数传递,而不需要指向它们的指针。当这样的值作为函数参数传递时,不会(或很少像切片那样)复制底层数据,因此,如果程序员获取指向该类型的指针并将其传递给该类型,则不会(或很少)提高效率。指针作为函数参数而不是值。

根据接受的答案,此类类型为切片映射通道

Effective Go 官方文档将切片描述为:

切片保存对基础数组的引用,如果将一个切片分配给另一个切片,则两个切片都引用同一个数组。如果函数采用切片参数,则调用者可以看到它对切片元素所做的更改,类似于将指针传递给底层数组。

映射为:

与切片一样,映射保存对底层数据结构的引用。如果将映射传递给更改映射内容的函数,则更改将在调用者中可见。

渠道为:

与映射一样,通道是通过 make 分配的,结果值充当对底层数据结构的引用。

文档似乎出于某种原因避免使用关于这些类型的术语“引用类型”,但在每种情况下仍然提到“引用”一词。

这些类型的特殊之处还在于,我们可以将 nil 分配给该类型的值,类似于指针类型(文档):

如果满足以下条件之一,则值 x 可分配给 T 类型的变量(“x 可分配给 T”): ... x 是预先声明的标识符 nil,T 是指针、函数、切片、映射、通道或接口类型。

在日常程序员的实践中,了解、清楚区分和清楚地传达作为函数参数传递时共享底层数据和不共享底层数据的类型或数据结构非常重要(但复制)底层数据。

能够在与其他程序员(尤其是初级程序员)对话时将切片映射通道作为一个整体进行引用清晰沟通的一大优势有助于确保程序中的数据安全并识别/防止与改变共享状态相关的危险。

一般如何调用这组类型?


解决方案


这个问题的格式不正确,因为方法不是 Go 中的类型,而函数类型只是函数,不适合关于“引用”的讨论。 假设您想讨论切片、映射、闭包和缓冲通道:

这些被称为“切片、映射、闭包和缓冲通道”,可能不需要为这 4 个命名:它们没有太多共同点。

以下四种类型展示了引用语义:切片、映射、闭包和缓冲通道。 (无缓冲通道则不然)。

  • 切片是一种值类型,它呈现后备数组的视图。因此,它具有与存储在支持数组中的值相关的引用语义。
  • 映射就是映射,并且具有与存储在映射中的值相关的引用语义。 (这是最接近引用类型的。)
  • 函数关闭器是闭包,很复杂,从价值所有权的角度与初级人员讨论它们可能没有帮助)。
  • 缓冲通道显示有关缓冲值的引用语义。

不需要一个复杂的术语(除非你从事学术工作,并且以分类、分离和分类为生。)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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