首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于具有“引用语义”的Go类型是否有一个通用名称,如map、片和通道?

对于具有“引用语义”的Go类型是否有一个通用名称,如map、片和通道?
EN

Stack Overflow用户
提问于 2021-01-14 10:27:16
回答 1查看 240关注 0票数 1

根据Go:引用类型作为参数中的回复和评论,Go似乎没有所谓的“正式”类型。

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

这类类型是映射和根据被接受的答案通道

正式生效的Go文档描述切片为:

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

地图为:

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

频道为:

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

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

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

如果应用下列条件之一,值x可分配给T类型的变量("x可分配给T"): ..。

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

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

能够将片、映射和channels作为一个单独的组与其他(尤其是初级程序员)进行会话,对于明确通信有助于确保程序中的数据安全和识别/防止与突变共享状态相关的危险是一个很大的优势。

这组类型在一般情况下如何调用?

EN

回答 1

Stack Overflow用户

发布于 2021-01-14 10:59:16

如何一般地调用这个切片、映射、函数和方法以及通道类型组?

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

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

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

  • 片是一种值类型,它将视图显示到支持数组中。因此,它具有存储在支持数组中的值的引用语义。
  • 映射是一个映射,它具有存储在映射中的值的引用语义。(这个是最接近引用类型的。)
  • 函数闭包是闭包,很复杂,根据价值所有权与初级讨论它们可能没有帮助)。
  • 缓冲通道显示有关缓冲值的引用语义。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65717235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档