不同目录的调用方法相信大家都会使用,如果是同一目录呢?这个还是跟Python有很大区别,比较特殊。

testa目录新建一个testaa.go文件,然后调用这个新建文件里面的函数:

package testaa
 
func Sub(i1 int, i2 int) int {
	return i1 - i2
}

我们来试着调用,按照以往的经验,我们导入这个模块:

package main
import "mywork/testa/testaa"
func main() {
	fmt.Println(testaa.Sub(5, 2))
}

看起来好像没有问题,试着运行下,就会报错:

C:\Users\Tony\go\src\mywork\testa>go run testa.go
testa.go:7:2: cannot find package "mywork/testa/testaa" in any of:
        D:\Program Files\Go\src\mywork\testa\testaa (from $GOROOT)
        C:\Users\Tony\go\src\mywork\testa\testaa (from $GOPATH)

我们发现找不到这个testaa包名,但实际上在这个目录下面是有这样的包名存在的啊。为什么?

首先这个testaa包名是一个目录,这里不是目录,是文件,另外就是同级目录不需要加载模块,只需要编译即可,然后调用的时候也是直接使用方法名调用,这是关键点,因为上面go run testa.go,没有编译testaa.go文件,所以出现找不到包或者是方法未定义等其他错误。
我们来到testa目录,然后编译里面的文件,这样就可以直接调用了,如下:

C:\Users\Tony\go\src\mywork\testa>go build

这样就将testa目录里面的go文件编译了,然后直接调用Sub函数即可:

package main
 
import ("fmt")
 
func main() {
	fmt.Println(Sub(5, 2))
}