带有地图、切片和通道等"reference semantics"的 Go 类型是否有通用名称?



根据Go中的响应和注释:引用类型作为参数Go似乎没有"官方"的类型。称为"引用类型"。

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

这些类型是切片地图,通道根据公认的答案

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

slice保存对底层数组的引用,如果将一个slice赋值给另一个slice,则两个slice都指向同一个数组。如果函数接受slice参数,则调用者可以看到它对slice元素所做的更改,类似于传递指向底层数组的指针。

地图:

与片一样,映射包含对底层数据结构的引用。如果你将一个映射传递给一个改变了映射内容的函数,这些改变将在调用者中可见。

和Channels as:

与映射一样,通道使用make分配,结果值作为对底层数据结构的引用。

文档似乎避免使用术语"引用类型";不管出于什么原因但还是提到了"参考"这个词;

这些类型的特殊之处在于,可以将nil赋值给这种类型的值,类似于指针类型(doc):

x可赋值给类型为T ("如果符合下列条件之一,x可转让给T "):

  • x为预先声明的标识符nil, T为指针、函数、切片、映射、通道或接口类型。

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

能够引用切片地图,通道作为一个单独的群体,程序员在与他人(尤其是初级程序员)进行对话时,清晰的沟通有助于确保程序中的数据安全,并识别/防止与共享安全相关的危险。

一般如何调用这组类型?

通常如何调用这组[片、映射、函数和方法以及通道]类型?

这个问题是错误的,因为方法在Go中不是类型,而函数类型只是函数,不适合讨论"引用"。假设您想讨论切片、映射、闭包和缓冲通道:

它们被称为"切片"、"映射"、"闭包"one_answers"缓冲通道"。也许没有必要为这四种动物命名:它们没有太多的共同之处。

下面四种类型显示引用语义:片、映射、闭包和缓冲通道。(未缓冲的通道没有)。

  • slice是一种值类型,它将视图呈现到后台数组中。因此,对于存储在后台数组中的值,它具有引用语义。
  • map是一个map,并且具有关于存储在map中的值的引用语义。(这是最接近引用类型的。)
  • 函数关闭器是闭包,很复杂,在价值所有权的基础上与下级讨论它们可能没有帮助)。
  • 一个缓冲通道显示了关于缓冲值的引用语义。

不需要一个复杂的术语(除非你在学术界工作,分类、分离和分类是你的生活)

相关内容

最新更新