> 本章主要介绍下`go语言包名规则`
[TOC]
## 主包
> 主包:包名为 main,多个go文件可以公用main包,但只有1个文件拥有main() 执行入口函数
```
// 主包
package main
import "fmt"
// 入口函数
func main() {
fmt.Println("程序执行入口")
}
```
## 定义包
> 我们可以定义自己的包,通常情况,我们的包名是包所在路径的最后一个目录名,例如:service/order 路径,那么我们包名就是order
> 如文件`service/order/pay.go`
```
package order
// 定义常量
// 支付宝支付类型
const ORDER_TYPE_ALIPAY = 1
// 微信支付类型
const ORDER_TYPE_WECHAT = 2
// 定义PayOrder结构体类型
type PayOrder struct {
Id int
Price float64
}
```
## 导入包
> 无论是导入内部包还是github上的第三方包,都是保存在GO工作空间里的(上一章开发环境有介绍),路径为`$GOPATH/src/`
> 导入单个包
```
import "包名"
```
> 导入多个包
```
import (
"包名1"
"包名2"
)
```
> 例子
```
package main
import (
// 导入我们自定义的包order
"tizi/service/order"
"fmt"
)
func main() {
// 使用order包中定义的结构体
o := order.PayOrder{}
o.Id = 100
o.Price = 12.6
fmt.Println(o)
}
```
## 引用包成员
> 通过包名和点( . ) 可以引用包里面定义的成员, 成员指的是包里面定义的函数、类型、变量、常量
```
package main
import (
// 导入我们自定义的包order
"tizi/service/order"
"fmt"
)
func main() {
// 引用包中常量
fmt.Println(order.ORDER_TYPE_ALIPAY)
// 引用包中结构体
o := order.PayOrder{}
o.Id = 100
o.Price = 12.6
fmt.Println(o)
}
```
## 包成员的可见性
> 可针对包中的进行控制,如 结构体、结构体字段、函数、变量、常量
> * 首字母大写,代表public,外部可以引用
> * 首字母小写,代表private,外部不可以引用
```
package order
// 支付宝支付类型
const ORDER_TYPE_ALIPAY = 1
// 微信支付类型
const ORDER_TYPE_WECHAT = 2
// 定义PayOrder结构体类型
type PayOrder struct {
Id int
price float64 // 首字母小写,包外部无法访问这个字段
}
// 首字母小写,是私有方法,包外部无法引用
func getOrderInfoById(id int) {
}
```
## 包管理工具 (go.mod)
> 通常第三方包存放在`$GOPATH/src/`下,相当于所有项目都共享第三方包,但是如果另外一个同事通过git下载项目,但是自己的开发环境 ($GOPATH/src/) 没有这些第三方包,就无法正常运行程序
> 解决办法则是使用 **go mod管理第三方依赖包**
```
# 启用 Go Modules 功能
go env -w GO111MODULE=on
# 切换到项目目录
cd $GOPATH/src/myproject
# 初始化 go.mod管理文件
go mod init
```
> go.mod 创建好了后,以后执行以下命令,都会自动分析源码依赖,安装缺少的依赖包
```
// 运行程序
go run main.go
// 构建项目
go build
```
- 基础知识
- 开发环境
- 包名规则
- 包初始化 (init)
- 基础数据类型
- 基础类型转换
- 格式化输出
- go指针
- 流程控制语句
- 函数定义
- 匿名函数
- 数组和切片
- map集合
- 结构体
- Interface接口
- 日期处理
- 数学计算
- 正则表达式
- 协程 (并发处理)
- channel
- waitgroup
- mutex (锁机制)
- websocket
- protobuf
- Redis
- 错误处理
- 打包程序
- NSQ消息队列
- 单元测试
- beego
- 安装入门
- Gin
- 快速入门
- 路由与控制器
- 处理请求参数
- 表单验证
- 处理响应结果
- 渲染HTML模版
- 访问静态文件
- Gin中间件
- Cookie处理
- Session处理
- Gin上传文件
- swagger
- pprof性能测试
- GORM
- 入门教程
- 模型定义
- 数据库连接
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 事务处理
- 关联查询
- 属于 (BELONG TO)
- 一对一 (Has One)
- 一对多 (Has Many)
- 多对多 (Many to Many)
- 预加载 (Preloading)
- 错误处理
- 第三方常用插件
- viper 读取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷键