使用import关键字,导入要使用的标准库包或第三方依赖包
import "a/b/c"
import "fmt"
c.Func1()
fmt.Println("Hello, World")
很多Golang初学者看到上面代码,都会想当然的将import后面的"c"、"fmt"当成包名,将其与c.Func1()和 fmt.Println()中的c和fmt认作为同一个语法元素:包名
我们来验证一下:
项目结构如下【看src/test项目】:
主要看hello.go与main.go:
hello.go
package myPkg
func MyTest() (a int, b string) {
a = 10006
b = "hello go"
return
}
main.go
package main
import (
"fmt"
"test/myPkg" //myPkg代表目录
)
func main() {
aa, bb := myPkg.MyTest() //myPkg代表包名
fmt.Println(aa, bb)
}
此时运行:
D:\workspace\go\src\test>go run main.go
10006 hello go
发现正常运行,我们现在很难看出import"test/myPkg"和myPkg.MyTest()这两个myPkg代表的是包名还是目录名。
我们假设import路径中的最后一个元素是包名,而非路径名。
我们改下代码:
hello.go
package myPkg2 //包名修改了 其他没有变
func MyTest() (a int, b string) {
a = 10006
b = "hello go"
return
}
main.go
package main
import (
"fmt"
"test/myPkg2"
)
func main() {
aa, bb := myPkg2.MyTest()
fmt.Println(aa, bb)
}
运行的时候发现编译错误,无法找到test/myPkg2包
我们的假设错了,我们把它改为路径:
main.go
package main
import (
"fmt"
"test/myPkg" //改为目录
)
func main() {
aa, bb := myPkg2.MyTest() //myPkg2代表包名
fmt.Println(aa, bb)
}
运行正常,所以import"test/myPkg"的myPkg代表的是目录,myPkg.MyTest()的myPkg代表包名