我们知道Go不支持可选参数,但是,在使用通道(尤其是缓冲通道)时,我意识到make
函数确实接受用于缓冲区大小的可选参数。如果Go团队不喜欢可选参数,那么我有点困惑,为什么他们支持这种反模式中经常使用的功能?
那么,为了不偏离原先的问题,有谁能帮忙解释一下这是如何工作的?
答案 0 :(得分:2)
make
不是正常功能。 new
,len
,cap
,close
,append
等等都没有。这些是built-in functions。
大多数内置函数和运算符都由编译器重写,以调用运行时程序包中的普通函数。
对于通道,编译器将make
调用重写为对runtime.makechan或相关变体之一的调用。
普通功能不能具有可选参数。