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