simple go web application 二维码生成 打包部署
go語言簡易web應用 & 二維碼生成及解碼 & 打包部署
轉載請注明出處: https://www.cnblogs.com/funnyzpc/p/10801476.html
前言(閑扯)
(20190503)我知道今天會有其他活動,因此我提前買了杯咖啡, (20190504)我知道深夜會完不成博客, 因此我加班到了這個點。 首先需要做的事情,Demo 準備并調試 還需要做的事情,構建github項目 以及要做的事情,README文檔編寫 最后要做的事情,生成一篇博客簡單WEB應用
話說一個簡單的WEB應用需要多少行依賴,多少行代碼,運行需要多大的package,需要多大的運行環境?
- 對于java:
- 我需要構建下面這些包(5MB+)
- 需要編寫以下代碼(14行+)
- 打包(jar or war 5MB+)
- 部署和環境(jdk 100MB+ , tomcat 5MB+ total:105MB+)
- 對于Go
- 需要代碼(15行+)
- 打包(<6MB,upx加殼<2MB)
- 部署和環境(<6MB or <2MB)
結論:一個java web應用部署不小于100MB,而一個go web應用最少只需要2MB,你真的沒聽錯他真的很小而且迅速,唯一不能比的是
java的生態 太龐大了,這是java之所以存在的優勢,不過這終將成為歷史。
(以上 go 代碼在這里:simpleServer.go)
二維碼生成及解碼
二維碼簡稱(QR CODE),中文全名叫快速響應碼,他的基礎基礎包含:向量運算、字符編碼、圖形識別等,需要具體了解的可涉獵此
二維碼原理,這里不再從算法底層開始寫起(畢竟大多數人都不會哈),
主要用到了開源都兩個依賴(編碼和解碼)
二維碼生成
這里用到了go-qrcode
- Demo主要邏輯(已調試通過)
二維碼解碼
這里用到了qrcode
- Demo主要邏輯
二維碼解析+WEB服務
一個產品的終態必將是一些列技術的組合,比如搭建一個在線的二維碼解析應用。
參考代碼
func main() {http.HandleFunc("/", IndexAction)http.HandleFunc("/qrCode", ReadQrCode)log.Println("請打開頁面: http://127.0.0.1:2345")http.ListenAndServe(":2345", nil)}// 主頁func IndexAction(writer http.ResponseWriter, request *http.Request) {t, err := template.ParseFiles("template/page/index.html")if err != nil {log.Println(err)}t.Execute(writer, nil)}type QrCode struct {QrContent string}// 讀取二維碼func ReadQrCode(writer http.ResponseWriter, request *http.Request) {//判斷請求方式if request.Method == "POST" {//設置內存大小request.ParseMultipartForm(64 << 20)//獲取上傳的第一個文件file, _, _ := request.FormFile("qrFile")// 讀取文件qrmatrix, err := rQrCode.Decode(file)defer file.Close()if err != nil {fmt.Println(err.Error())return}log.Println("獲取到二維碼內容:", qrmatrix.Content)t, err := template.ParseFiles("template/page/qrCode.html")if err != nil {log.Println(err)}t.Execute(writer, QrCode{QrContent: qrmatrix.Content})} else {//解析模板文件t, _ := template.ParseFiles("template/page/qrCode.html")//輸出文件數據t.Execute(writer, nil)}}// 讀二維碼func readQrCode() {file, error := os.Open("D:/tmp/cnblogs.png")if error != nil {fmt.Println(error.Error())return}defer file.Close()qrmatrix, err := rQrCode.Decode(file)if err != nil {fmt.Println(err.Error())return}fmt.Println(qrmatrix.Content)}最終效果圖
主頁
結果
打包部署
對于部署,在前面java和go的對比中已經提到過,go 應用不存在虛擬機,他的代碼是直接從文本編譯成二進制包(包含運行環境) 最終也必然是輕巧無依賴的,
另外,需要說的是go 的 打包本身是不加殼的,源包會比較大,一般部署時會做兩個處理。
使用 -ldflags 去掉符號 去掉調試 壓縮體積
同時使用upx加殼 upx --backup --brute [PACKAGE_FILE_NAME] 以進一步壓縮體積(壓縮至1/3),加密軟件包,這樣利于傳輸發布同時還能保持原生包的功效哦~
這里我簡要給出一般的打包命令:
linux `GOOS=linux GOARCH=amd64 go build -ldflags "-w -s" ./main.go` window `GOOS=windows GOARCH=amd64 go build -ldflags "-w -s" ./main.go` mac `GOOS=darwin GOARCH=amd64 go build -ldflags "-w -s" ./main.go`引用加殼命令:
upx --backup --brute [main.exe(windows) or main(linux、mac)]最后上線部署:
linux: ./[PACKAGE_FILE] &mac: ./[PACKAGE_FILE] &windows: 雙擊[PACKAGE_FILE.exe],或將[PACKAGE_FILE.exe]配置為服務最后
以上所有代碼均在我的github項目中,若所言有誤懇請指正~
項目地址:qrCodes
轉載于:https://www.cnblogs.com/funnyzpc/p/10801476.html
總結
以上是生活随笔為你收集整理的simple go web application 二维码生成 打包部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十周编程总结
- 下一篇: jQuery中each和js改变this