NotePublic/Software/Development/Language/Go/Package/Go_包的创建和使用.md

98 lines
1.7 KiB
Markdown
Raw Normal View History

# 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() 函数。