社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
需要注意的是
package main
import (
"fmt" //-------->这里的"fmt"是fmt包所在的目录名
)
func mian() {
fmt.println("hello") //-------> 这里的"fmt"是fmt包
}
如果编译时main包导入了其他的包,那么这些包将被依次导入。
当一个包被导入时,如果该包还导入了其它的包,那么先将其他的包导入进来,然后再对该包的包级常量和变量进行初始化,最后执行init函数(如果存在)。包的导入如上图所示,是一个递归地过程,等所有被导入的包加载完毕,就会对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在),最后执行main函数。
如果一个包被多个包同时导入,那么它只会被导入一次。
风格一
import "package1"
import "package2"
import "package3"
...
风格二
import (
"package1"
"package2"
"package3"
...
)
点(.)操作的含义是:点(.)标识的包导入后,调用该包中函数时可以省略前缀包名。点(.)操作的语法为:
import . "package1"
import . "package2"
import . "package3"
...
import (
. "package1"
. "package2"
. "package3"
...
)
下面的示例中,fmt包将使用点操作省略前缀包名,os包用法保持不变:
package main
import (
. "fmt"
"os"
)
func main() {
for _, value := range os.Args {
Println(value)
}
}
别名操作的含义是:将导入的包命名为另一个容易记忆的别名。别名操作的语法为:
import p1 "package1"
import p2 "package2"
import p3 "package3"
...
import (
p1 "package1"
p2 "package2"
p3 "package3"
...
)
下面的示例中,fmt包将使用别名操作重新命名为f,os包用法保持不变:
package main
import (
f "fmt"
"os"
)
func main() {
for _, value := range os.Args {
f.Println(value)
}
}
下划线(_)操作的含义是:导入该包,但不导入整个包,而是执行该包中的init函数,因此无法通过包名来调用包中的其他函数。使用下划线(_)操作往往是为了注册包里的引擎,让外部可以方便地使用。下划线(_)操作的语法为:
import _ "package1"
import _ "package2"
import _ "package3"
...
import (
_ "package1"
_ "package2"
_ "package3"
...
)
总之,Java中的package实际上就可以理解为文件名,"import"导入的是包中(文件中)的某个类(.java文件);而go总的package不是指文件,但一个文件中只能有一个package,一个package组织多个".go"源文件,"import"导入的是文件而不是包,而程序中实际使用的是包
参考来源:golang之package Go包导入与Java的差别
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!