# Go 包的创建和使用 ## 1.创建包 ```go /** * @file demo/pkg/pkg.go */ package pkg // ... ``` ## 2.导入和使用包 ```go /** * @file demo/main.go */ package main import ( // 相对于当前路径 "demo/pkg" // 在 $GOPATH 下 "my.com/mypkg" ) func main() { // ... } // ... ``` ### 2.1.相对路径导入 导入当前文件同一目录的 model 包: ```go import "./model" ``` ### 2.2.绝对路径 加载 $GOPATH/src/shorturl/model 模块: ```go import "shorturl/model" ``` ### 2.3.“\.”操作 有时候会看到如下的方式导入包: ```go import ( . "fmt" ) ``` 这个“\.”操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的: ```go fmt.Println("hello world") ``` 可以省略的写成: ```go Println("hello world") ``` ### 2.4.别名 别名操作顾名思义可以把包命名成另一个用起来容易记忆的名字: ```go import ( f "fmt" ) ``` 别名操作调用包函数时前缀变成了重命名的前缀,即: ```go f.Println("hello world") ``` ### 2.5.“\_”操作 这个操作经常是让很多人费解的一个操作符,请看下面这个 import: ```go import ( "database/sql" _ "github.com/ziutek/mymysql/godrv" ) ``` “\_”操作其实只是引入该包。当导入一个包时,它所有的 init() 函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的 init() 函数被执行而已。这个时候就可以使用“\_”操作引用该包了。即使用“\_”操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其 init() 函数。