【问题标题】:How make function in Go handle optional parameter? [duplicate]Go中的make函数如何处理可选参数? [复制]
【发布时间】:2019-05-24 13:06:05
【问题描述】:

我们知道 Go 不支持可选参数,但是,在使用通道和更具体的缓冲通道时,我意识到 make 函数确实接受缓冲区大小的可选参数。如果 Go 团队不喜欢可选参数,我有点困惑,那么为什么他们支持这种反模式经常使用的函数?

好吧,为了不偏离最初的问题,谁能帮忙解释一下,这在幕后是如何工作的?

【问题讨论】:

  • 关于make 的观点很有趣,似乎make 是一种特殊的语言结构(而不​​是普通函数),因此规则不适用于它。见stackoverflow.com/questions/18512781/…
  • "如果 Go 团队不喜欢可选参数,那么他们为什么要支持这种反模式中经常使用的函数?"这是一个见仁见智的问题,在 Stack Overflow 上是题外话:。 “主要基于意见:许多好的问题会根据专家经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。”
  • @peterSO 是的,这当然是一个固执己见的问题,但我的主要问题不是。我同意它可以被视为Built-In source code location的重复。

标签: go


【解决方案1】:

make 不是正常功能。 newlencapcloseappend 等等也不是。那些是built-in functions

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2011-01-03
    • 2019-10-04
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多