ch := make(chan int, 10)
fmt.Println(cap(ch))
是函数调用cap(ch)
常量还是评估?
如果s是字符串常量,则表达式len(s)是常量。如果s的类型是数组或指向数组的指针而表达式s不包含通道接收或(非常量)函数调用,则表达式len(s)和cap(s)是常量;在这种情况下,不评估s。否则,len和cap的调用不是常量,而是评估s。
似乎是评估。
答案 0 :(得分:4)
是的,cap()
在应用于通道时不是常数,因为通道的容量未在类型中编码,因此在编译时不知道。
答案 1 :(得分:1)
确定的呼叫上限(ch)被评估,仅仅是因为
ch := make(chan int, 10)
fmt.Println(cap(ch))
ch = make(chan int, 9)
fmt.Println(cap(ch))
Proof-link https://play.golang.org/p/R0TfCpC-4L