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