Github:github.com/fyonecon/ginlaravel
Gitee:gitee.com/fyonecon/ginlaravel
GinLaravel、GoLaravel介紹
GinLaravel基於Golang框架Gin(Gin學習文件:《Gin 框架中文文件》 )開發,專案結構和專案理念參考Laravel。學習本專案時建議從閱讀本專案原始碼開始,並具備Golang、Gin、go mod、centos+nginx、redis、mysql、加密解密、http、Swagger等必要知識。GinLaravel的構建和執行週期與Beego、Vue、React、Laravel、ThinkPHP、Django等都會有類似的引導思路、引數設定、外掛擴充套件、服務部署、程式碼統一性、生態護城河等。GinLaravel儘量減少漢字造詞、功能造詞、賢者造詞,不會用描述華麗、中英文混雜的造詞方式去包裝一個功能平常的老東西(比如 http+header、cookie/localstorage/sqlite+token、加密與解密、資料快取+佇列、負載均衡+docker、記憶體常駐與微服務、介面安全與前後端分離等)。
整個開發以人為本,功能模組化擴充套件,系統安全可控,漸進式提升訪問量。
GinLaravel支援MVC開發模式。本專案展示了MVC處理資料,同時展示”Verify—Controller—Kit”模式處理資料。
現已支援
Go-MySQL、GORM(v2)、Go-Redis、熱更(fresh)、Swagger、MVC、模版輸出、Http訪問頻率攔截、HttpCors、對稱加密(可中文)、http攔截器、多層路由、分詞與全文檢索、執行時監控、圖形驗證碼、生成和讀取Excel、全域性定時器等。
測試過的客戶端環境等:Vue3+Axios、Fetch、POST(x-www-form-urlencoded)、GET、Centos7、Mac。
設計理念
寬進嚴出,功能組合式,面向Api,適合複雜專案,任何引數或服務都會有預設值。整個專案執行需go(1.16+<2021~>)+mysql+redis!
路由週期
init()+main ➡️ 請求路由名 ➡️ header過濾 ➡️ 攔截請求頻率 ➡️ 校驗請求方法和Token引數 ➡️ 執行目標函式 ➡️ Controller程式並返回Json ➡️ 治理或執行時監控服務 ➡️ 程式結束️
專案目錄
/app/Common/ ※ 對go原生封裝的公共函式、自定義必要資料引數配置。有很多用Go解釋Go的公用函式。
/app/Http/ ※ 控制器、模型、攔截器
/app/Http/Controller/ ※ 控制器
/app/Http/Controller/Example ※ 示例
/app/Http/Controller/Gen3 ※ 版本3的控制器資料夾
/app/Http/Model/ ※ 資料模型
/app/Http/Middleware/ ※ 中介軟體,含有cors、http限速、500報錯攔截、預設路由、app執行時等
/app/Kit/ ※ 自定義系統服務,包含第三方服務和系統功能服務
/app/Runtime/ ※ app服務等執行時事件處理
/app/TaskInterval/ ※ app全域性定時任務,預設20s精度
/bootstrap/ ※ 系統服務啟動、資料庫全域性引用配置,一般不需要更改此處。
/bootstrap/app/ ※ 專案執行入口
/bootstrap/driver/ ※ 服務驅動
/config/ ※ MySQL資料庫、Redis快取、http埠號等配置
/config/docs/ ※ 介面文件外掛Swagger的目錄
/docs/ ※ 自動介面文件Swagger的的目錄
/extend/ ※ 自定義的擴充套件庫,kit是擴充套件介面應用,extend是擴充套件介面封裝
/routes/ ※ 路由,同時支援模版型路由(web.go)、Api型路由(api.go)。推薦4層路由命名。
/tmp/ ※ fresh熱更的快取日誌目錄。目錄需許可權777。
/storage/ ※ 系統日誌、檔案上傳、靜態快取。目錄需許可權777。
/views/ ※ 模版渲染的原始資料夾
/views/pages/ ※ 模版的html檔案
/views/static/ ※ 模板靜態資源:js、css、img
ginvel.com ※ 專案生產的二進位制檔案,在生產環境用。目錄需許可權773。
go.mod ※ 專案所依賴的module路徑、第三方庫等的引入
main.go ※ 跑起本專案的入口main檔案。
命名原則
- 自定義函式:大駝峰
- 自定義變數:小駝峰
- 自定義結構體和結構體成員:大駝峰
- MySQL、Redis:小寫+下劃線
- 介面名:小寫+下劃線
- 自定義資料夾名:大駝峰
- 系統集資料夾名:小寫
基礎環境
1⃣️Go執行環境
️搭建Go和基礎Gin環境請參考:blog.csdn.net/weixin_41827162/arti...
2⃣️MySQL5.7+
請將/專案資料/ginlaravel.sql 檔案匯入到你的資料庫
3⃣️Redis
請提前開啟你的Redis服務
cmd中執行「 go run main.go 」即可啟動專案。
或使用熱更方式啟動http服務,在cmd中目錄執行”fresh”。v1.4開始為適配swaggo遂將server.go更名為main.go。
訪問
專案上線
serverConfig[“ENV”]的值改成release,然後使用以上同樣方法執行。
如何初始化專案
以當前目錄 /Users/fyonecon/go/src/ 為例
獲取原始碼:
cd go/src
git clone https://github.com/fyonecon/ginlaravel.git
初始化專案:
go mod init
清除不需要的vendor中的第三方擴充套件:
go mod tidy
重新載入vendor中的第三方擴充套件:
go mod vendor
將專案打包成二進位制檔案:
go build -mod=mod
(執行二進位制檔案需要ginlaravel的檔案的許可權為:chmod 773 ginvel.com)
在/config/mysql.go配置資料庫資訊。
在/config/redis.go配置快取資料庫資訊。
啟動http服務:
go run main.go
或 啟動二進位制檔案http服務:
./ginlaravel
執行fresh熱更服務(Mac環境)
以專案目錄 /Users/fyonecon/go/src/ginlaravel 為例
安裝fresh:
go get github.com/pilu/fresh
去.bash_profile檔案目錄:
cd ~
重新編譯配置檔案:
source ~/.bash_profile
切換到專案目錄:
cd go/src/ginlaravel
開啟熱更:
fresh
退出http服務用快捷鍵:Ctrl + C 。或直接關閉終端視窗。
以上即可專案開啟的fresh熱更服務。
若想一直開啟終端視窗,請使用screen(yum install screen)來保持視窗。
熱更服務文件:github.com/gravityblast/fresh 。
Swagger介面文件
安裝教程(GinLaravel v1.4已經整合swagger(v1.7開始預設不整合,因為沒什麼卵用),在/routes/must.go路由檔案裡面,不需要再次安裝和引入。)如下:
1。進入專案跟目錄
2。安裝swag命令:
go get -u github.com/swaggo/swag/cmd/swag
3。檢視是否命令是否安裝成功:
swag -v
3.1。安裝docs
swag init
3.2。切換到vendor目錄,將swaggo安裝在vendor目錄下而不是全域性安裝:
cd vendor
4。安裝 gin-swagger:
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files
go mod vendor
5。在route裡面import引入swag:
import (
swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" _ "ginlaravel/docs" // docs is generated by Swag CLI, you have to import it.)
5.1。書寫路由:
url := ginSwagger.URL("http://127.0.0.1:8090/swagger/doc.json") // The url pointing to API definition
route.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
5.2。啟動http服務:go run main.go
5.3。訪問:http://127.0.0.1:8090/swagger/index.html
將專案打包成二進位制檔案(Mac、Centos環境)
#1。在ginlaravel專案根目錄:
go build -mod=mod
#此時,在專案目錄生成或更新了ginlaravel二進位制檔案。
#2。開啟檔案的可執行許可權:
chmod 773 ginlaravel
#3。在專案根目錄執行:
./ginvel.com
#即可開啟二進位制服務。
將Go專案部署在Centos7上(Go環境搭建、伺服器環境搭建、資料庫環境搭建)
如何將GOPATH裡面的”go get xxx”擴充套件引用到vendor裡面
先執行”go get 擴充套件github地址”,在專案中import引入”xxx”擴充套件
再在專案跟目錄執行”go mod vendor”
這樣就可以將擴充套件自動引用到vendor目錄下而不用govendor。
將go專案部署到centos7的docker中
########### Dockerfile程式碼 ##########
#1.1)docker images檢視製作
FROM golang:latest
# 修改系統為上海時區
RUN echo "Asia/Shanghai" > /etc/timezone
&& rm /etc/localtime && dpkg-reconfigure -f noninteractive tzdata#作者
MAINTAINER fyonecon "2652335796@qq.com"
#設定工作目錄(暫時規定最終資料夾名與module名相同)
WORKDIR $GOPATH/src/ginvel.com
#將伺服器的go工程程式碼加入到docker容器中
ADD . $GOPATH/src/ginvel.com
#修改env引數
RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://goproxy.cn,direct
RUN export GIN_MODE=release
#初始化框架所需擴充套件
RUN go mod vendor
#編譯成二進位制檔案
RUN go build -mod=mod
#暴露埠
EXPOSE 8090
#最終執行docker的命令(必須為module名)
ENTRYPOINT ["./ginvel.com"]
######### Dockerfile教程 #########
#1.2)製作docker映象,單獨在專案跟目錄執行(這個docker映象名可以自定義,一般與資料夾名或module名一樣即可):
#將Dockfile檔案放置在專案跟目錄,然後執行
#docker build -t ginvel.com .
#檢視映象
#docker images
#檢視docker佔用記憶體大小
#docker ps -as
#2)docker執行映象,執行生成的二進位制檔案(二進位制檔案為專案go.mod裡面的module名,不可更改。及其重啟後,docker的埠對映需要重新執行。)
#第一個埠為宿主機埠,第二個埠為docker埠,注意httpserver的host是0.0.0.0。
#開啟docker(前臺方式)
#docker run -p 8090:8090 ginvel.com
#開啟docker(後臺方式,推薦)
#docker run -p 8090:8090 -d ginvel.com
#2.1)檢視已執行的docker
#docker ps
#3)檢視docker日誌
#docker logs -f ginvel.com
#4)其他(可以使用docker build的名或映象id,用docker images檢視)
#停止服務
#docker stop ginvel.com
#刪除container例項
#docker rm ginvel.com
#刪除container映象
#docker rmi ginvel.com
#強行刪除container映象
#docker rmi -f ginvel.com
#5)進入docker的命令
#檢視正在執行的docker的id(docker images不行)
#sudo docker ps
#進入docker
#sudo docker exec -it 正在執行的docker的id /bin/bash
版權
MIT
本作品採用《CC 協議》,轉載必須註明作者和本文連結