import导包方法
共有三种方法哦~但不建议用"."因为如果两个包中都有同一个接口名,那么这时候进行“."导包就会使程序误解,到底要调用哪个呢,所以最好不要用。
import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包的函数,fmt 包实现了格式化 IO(输入/输出)的函数
可以是相对路径也可以是绝对路径,推荐使用绝对路径(起始于工程根目录)
-
点操作 我们有时候会看到如下的方式导入包
import( . "fmt" )
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调
用的
fmt.Println("hello world")
可以省略的写成Println("hello world")
-
别名操作 别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字
import( f "fmt" )
别名操作的话调用包函数时前缀变成了我们的前缀,即
f.Println("hello world")
-
_操作 这个操作经常是让很多人费解的一个操作符,请看下面这个import
import ( "database/sql" _ "github.com/ziutek/mymysql/godrv" )
_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数
下面来讲讲init调用流程
首先我们先看一个图
我来讲解一下有关main函数和init函数。
我们再写程序的的时候呢,不仅是main有出入口,实际上每个包都会有一个main函数来作为当前包的一个入口。
有关main函数和init一个调用的基本过程,我们一般进程入口呢是main来作为咱们程序主入口,然后呢实际上再往下走的时候呢,我会导入很多包,比如说import fmt等等吧。甚至是我们制定的自己的包。然后当我们就导包的时候呢,实际上这个程序它流程并不会往下执行,而是先去这个包里解析有没有第二个包,然后继续往下递进的。直到它里边儿没有找到任何包为止。然后它会分析里边儿的一些的有关全局常量,局部变量,最终就执行这个包里的init函数,如果当前的包他没有定义init函数,当然这函数就不再执行了,如果定义了的话,你重写的一个自定义的一个函数,它会执行,然后呢出来反回去,继续分析以此类推。最后执行main包里的全局变量、常量和init函数和main。所以init函数要先于main函数。
下面用代码来进行演示一下
首先,在test文件下创建两个文件,分别放置lib1.go和lib2.go。代码如下
package lib1
import "fmt"
func Lib1test() { //注意必须是大写的哦~,不然调用的时候会报错
fmt.Println("lib1test()...")
}
func init() {
fmt.Println("lib1.init()...")
}
package lib2
import "fmt"
func Lib2test() {
fmt.Println("lib2test()...")
}
func init() {
fmt.Println("lib2.init()...")
}
其次在hello.go 里引入两个package注1意要写路径哦~要不然会报错,代码如下
package main
import (
"test/lib1"
"test/lib2"
)
func main() {
lib1.Lib1test()
lib2.Lib2test()
}
好了接下来我们来看一看怎么个过程吧 ~
如下图,每个输出对应的箭头所指向就是调用它的源头
注意事项:lib1和lib2中的函数为什么是大写字母开头呢??
哈哈答案很简单!因为只有是大写的开头他才为对外开放的哦~否则会报”lib1test not exported by package lib1“错误