99 lines
1.7 KiB
Markdown
99 lines
1.7 KiB
Markdown
# 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() 函数。
|