Go中的make函数如何处理可选参数? [复制]
Posted
技术标签:
【中文标题】Go中的make函数如何处理可选参数? [复制]【英文标题】:How make function in Go handle optional parameter? [duplicate] 【发布时间】:2019-05-24 13:06:05 【问题描述】:我们知道 Go 不支持可选参数,但是,在使用通道和更具体的缓冲通道时,我意识到 make
函数确实接受缓冲区大小的可选参数。如果 Go 团队不喜欢可选参数,我有点困惑,那么为什么他们支持这种反模式经常使用的函数?
好吧,为了不偏离最初的问题,谁能帮忙解释一下,这在幕后是如何工作的?
【问题讨论】:
关于make
的观点很有趣,似乎make
是一种特殊的语言结构(而不是普通函数),因此规则不适用于它。见***.com/questions/18512781/…
"如果 Go 团队不喜欢可选参数,那么他们为什么要支持这种反模式中经常使用的函数?"这是一个见仁见智的问题,在 Stack Overflow 上是题外话:。 “主要基于意见:许多好的问题会根据专家经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。”
@peterSO 是的,这当然是一个固执己见的问题,但我的主要问题不是。我同意它可以被视为Built-In source code location的重复。
【参考方案1】:
make
不是正常功能。 new
、len
、cap
、close
、append
等等也不是。那些是built-in functions。
大多数内置函数和运算符都由编译器重写,以调用运行时包中的普通函数。
对于通道,编译器将 make
调用重写为对 runtime.makechan 或相关变体之一的调用。
普通函数不能有可选参数。
【讨论】:
以上是关于Go中的make函数如何处理可选参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章