根据Go:引用类型作为参数中的回复和评论,Go似乎没有所谓的“正式”类型。
然而,有些类型实际上保存了指向底层数据的指针,这些类型允许将这些类型的值作为函数参数有效地传递,而不使用指向它们的指针。当将该值作为函数参数传递时,没有(或与切片一样少)复制底层数据,因此,如果程序员将指针作为函数参数传递给类型,而不是传递值,效率就不会有(或很小)的提高。
这类类型是片、映射和根据被接受的答案的通道。
正式生效的Go文档描述切片为:
切片保存对基础数组的引用,如果将一个切片分配给另一个,则两者都引用相同的数组。如果一个函数采用了一个切片参数,它对该切片元素所做的更改将对调用方可见,这类似于将指针传递给基础数组。
地图为:
与切片一样,映射保存对底层数据结构的引用。如果将映射传递给更改映射内容的函数,则这些更改将在调用方中可见。
频道为:
就像映射一样,通道是用make分配的,结果值充当对底层数据结构的引用。
文档似乎出于任何原因避免对这些类型使用“引用类型”一词,但在每种情况下仍然提到“引用”一词。
这些类型的特殊之处还在于可以将nil分配给类似于指针类型(文档)的这种类型的值:
如果应用下列条件之一,值
x可分配给T类型的变量("x可分配给T"): ..。
x是预先声明的标识符nil,T是指针、函数、切片、映射、通道或接口类型。在日常程序员的实践中,很重要,它需要知道、清楚区分和清楚地交流类型或数据结构,这些类型或数据结构在作为函数参数传递时与那些不共享(但不复制)底层数据的数据共享。
能够将片、映射和channels作为一个单独的组与其他(尤其是初级程序员)进行会话,对于明确通信有助于确保程序中的数据安全和识别/防止与突变共享状态相关的危险是一个很大的优势。
这组类型在一般情况下如何调用?
发布于 2021-01-14 10:59:16
如何一般地调用这个切片、映射、函数和方法以及通道类型组?
这个问题是不正确的,因为方法不是Go中的类型,函数类型是,只是函数,不适合讨论“引用”。假设您想讨论切片、映射、闭包和缓冲通道:
它们被称为“片、映射、闭包和缓冲通道”,可能没有必要为这4条命名:它们没有太多的共同点。
以下四种类型显示引用语义:切片、映射、闭包和缓冲通道。(未缓冲的频道没有)。
不需要一个复杂的术语(除非你在学术领域工作,分类、分离和分类是你的生活。)
https://stackoverflow.com/questions/65717235
复制相似问题