设为首页 加入收藏

TOP

simple go web application & 二维码生成 & 打包部署(二)
2019-05-23 14:33:26 】 浏览:152
Tags:simple web application 二维 生成 打包 部署
  • Demo主要逻辑
  • func ReadQrCode(){
        //获取上传的第一个文件
        file, _, _ := os.Open("本地文件路径")
        // 读取文件
        qrmatrix, err := rQrCode.Decode(file)
        defer file.Close()
        if err != nil {
            fmt.Println(err.Error())
            return
        }
        log.Println("获取到二维码内容:", qrmatrix.Content)
    }

    二维码解析+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

    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇带小伙伴手写 golang context 下一篇深度解密Go语言之反射

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目