Function 如何区分golang中的包名和对象名

Function 如何区分golang中的包名和对象名,function,go,package,Function,Go,Package,我一直在问这个问题,什么是判断它是包名还是对象名的最快方法,正如上面的代码所示,在main func中,fmt被称为包名,因为大家都知道。但是说到xxx.Println(),你怎么知道它是包名还是对象名,假设main函数包含很多行代码,很难定位对象“xxx”的声明,并且有很多导入的包,您很难搜索导入的每一行()以查看包中是否列出了“xxx”,您如何判断xxx是什么 与func Println相同,您只需直接转到yyy.Print(3),func声明中的接收方很难找到,因为它不在屏幕上,您如何判断

我一直在问这个问题,什么是判断它是包名还是对象名的最快方法,正如上面的代码所示,在main func中,fmt被称为包名,因为大家都知道。但是说到xxx.Println(),你怎么知道它是包名还是对象名,假设main函数包含很多行代码,很难定位对象“xxx”的声明,并且有很多导入的包,您很难搜索导入的每一行()以查看包中是否列出了“xxx”,您如何判断xxx是什么

与func Println相同,您只需直接转到yyy.Print(3),func声明中的接收方很难找到,因为它不在屏幕上,您如何判断yyy是最快的方式,yyy可以是包名和接收方名


如果没有更简单的方法,那是否意味着我应该首先搜索import()列出的包,然后滚动屏幕到func声明的最开始,找到接收方名称,然后我就可以知道它是什么了?这听起来太耗时了

使用短期记忆,快速扫描源代码以查找显著特征

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)
}
应用语言规则。例如,块和范围规则

通过练习,这很容易

参考资料:

对于第二个问题(
yyy.Println()
insidemethod
Println()
),我认为用非常短的名字命名接收者是标准的Go风格。因此,标准围棋风格建议:

package main

import (
    // ......
    "fmt"
    // ......
)

type xxx struct {
    one int
    two string
}

func (this *xxx) Print(a int) {
    fmt.Println(a)
}

func (yyy *xxx) Println() {
    fmt.Println("2")
    yyy.Print(3) // yyy is receiver *xxx
}

func main() {
    // ......
    xxx := new(xxx)
    fmt.Println("1")
    // ......
    xxx.Println() // xxx is var xxx
}

至于第一个问题……我不确定你是在谈论你的代码,还是别人的代码。我想说,最终了解给定程序或库使用的模块是相当标准的。(真正简短的变量名,然后是camelCase变量名也有帮助。)

这是一个有效的问题,包/变量+虚线语法令人困惑,它可能是一个方法调用或来自包的函数调用。这使得阅读代码变得困难。你必须意识到这两种不同的解释。
func (x *xxx) Println() {
    fmt.Println(2)
    x.Print(3)
}