以下代码输出什么:
package main
func main() {
var x *struct {
s [][32]byte
}
println(len(x.s[99]))
}
A:运行时 panic;B:32;C:编译错误;D:0
答案B
- 返回结果总是 int;
- 返回结果有可能是常量;
- 有时对函数参数不求值,即编译期确定返回值;
这里 len(x.s[99]) 因为s的切片类型是[32]byte,因此得len(x.s[99]) = 32
这里要清楚 len 和 cap 是不会panic的是编译器完成的功能 表达式 x.s[99] 没有包含 channel 接收也不是函数调用,因此在编译阶段就已经确定返回的值