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