不同目录的调用方法相信大家都会使用,如果是同一目录呢?这个还是跟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))
}