【发布时间】:2014-04-07 01:12:17
【问题描述】:
package main
import (
......
"fmt"
......
)
func main() {
......
xxx:=new(xxx)
fmt.Println("1")
......
xxx.Println()//confusing
}
type xxx struct{
one int
two string
}
func (yyy *xxx) Println(){
fmt.Println("2")
yyy.Print(3)//confusing too
}
func (this *xxx) Print(a int){
fmt.Println(a)
}
这个问题一直困扰着我,什么是最快的方法来判断它是包名还是对象名,如上面的代码,在 main func 中,fmt 被称为包名,因为每个人都知道。但是说到xxx.Println(),你怎么知道它是包名还是对象名,假设main函数包含很多行代码,并且很难确定对象“xxx”的声明,而且,导入的包很多,你很难搜索import()的每一行,看看包中是否列出了“xxx”,你怎么知道xxx是什么?
和func Println一样,直接上yyy.Print(3),func声明中的receiver很难找到,因为它不在屏幕上,你怎么知道yyy是最快的方式, yyy 可以是包名和接收者名。
如果没有这样更简单的方法,这是否意味着我应该总是先搜索 import() 列出的包,然后将屏幕滚动到 func 声明的最开头以查找接收者名称,然后我可以知道它是什么?这听起来太花时间了!
【问题讨论】:
-
这是一个有效的问题,包/变量+点分语法令人困惑,它可以是方法调用或来自包的函数调用。它使阅读代码变得困难。您必须注意这两种不同的解释。