语法歧义
func main() {
x := 100
p := *int(&x) // cannot convert &x (type *int) to type int 正确写成(*int)(&x)
println(p)
}
(*int)(p) --- 如果没有括号 --> *(int(p))
(<-chan int)(c) <-(chan int(c))
(func())(x) func() x
func()int(x) //有返回值的函数类型可省略括号,但依然建议使用。
(func()int)(x)//使用括号后,更易阅读
语法歧义对初学者来说问题比较多。比如这个例子里面把x
转换成一个指针,但是编译器语法解析后边的先解析,就相当于把指针转换成整数,这种转换是失败的,必须这样写(*int)(&x)
,如果不使用括号的话解析为*(int(&x))
肯定就出错了。
类似的还很多。单向的一个通道<-chan int(c)
解析为<-(chan int(c))
从通道取数据。
类型转换
func main() {
a := 10