> 本章主要介紹下`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 快捷鍵