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 不是正常功能。 newlencapcloseappend 等等也不是。那些是built-in functions。

大多数内置函数和运算符都由编译器重写,以调用运行时包中的普通函数。

对于通道,编译器将 make 调用重写为对 runtime.makechan 或相关变体之一的调用。

普通函数不能有可选参数。

【讨论】:

以上是关于Go中的make函数如何处理可选参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

发布 TypeScript 包时如何处理可选的对等依赖项?

构造准备好的语句时如何处理可选列

如何处理可呈现图像的布局?

在bash中使用getopts来获取可选的输入参数[重复]

Spring Boot 如何处理可抛出对象

如何处理 Play 框架中的可选查询参数