在云平台上基于Go语言+Google图表API提供二维码生成应用
二维码能够说已经深深的融入了我们的生活其中。到处可见它的身影;但通常我们都是去扫二维码,
曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人。
这里就分享一下基于Go语言+Google图表API提供二维码生成功能的小应用,并演示怎样把它公布到云平台上,
让每一个人都能够通过网络訪问使用它。
Google图表API
Google在http://chart.apis.google.com 上提供了一个将表单数据自己主动转换为图表的服务。
只是,该服务非常难交互, 由于你须要将数据作为查询放到URL中。
此程序为一种数据格式提供了更好的的接口: 给定一小段文本。
它将调用图表server来生成二维码(QR码)。这是一种编码文本的点格矩阵。
该图像可被你的手机摄像头捕获。并解释为一个字符串,比方URL,
这样就免去了你在狭小的手机键盘上键入URL的麻烦。
应用效果
在文本框中输入一个URL,如(http://blog.csdn.net/testcs_dn)。点击Show QR,会生成一张二维码的图片
构建一个相似的应用程序的前提条件
一个 Bluemix 帐户。您还没有? 点击这里注冊。已经有,点击这里登录。
对 HTML、CSS 、JavaScript 和Go语言的基本了解。
我提供了全部必要代码,但对这些技术的基本了解有助于您理解有关的细节。
步骤 1. 创建您的 GO 应用程序
- 1、在 Bluemix 用户界面中,转至“仪表板”。
- 2、单击创建应用程序。
- 3、单击 Web,然后依照指导经验来选择入门模板。指定名称以及选择编码方式。
- 输入应用程序名称
- 应用程序名称是唯一的,接下来要通过它做为二级域名来訪问你的应用!
- 点击完毕之后,须要等待一会儿,然后能够看到下图的界面
- 这时就能够訪问你刚刚创建的应用了。例如以下图:
-
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border: none; max-width: 100%;" />
步骤 2. 准备开发环境
假设您没还有Go语言的本地执行环境,该过程请參考:《Go语言入门》怎样在Windows下安装Go语言编程环境
步骤 3.编写代码
1、下载初始Hello World演示样例代码
进入您的应用程序,点击左側的開始编码,在右側点击“下载起动器代码”。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
2、创建本地应用
在Go的$GOROOT或$GOPATH文件夹下创建一个文件夹。将下载后的起动器代码解压到刚创建的文件夹下,
比如我的是: C:\Go\src\web1
打开文件夹下的app.go文件。将文件的内容替换为以下的代码:
package main import (
"log"
"net/http"
"os"
"html/template"
//for extracting service credentials from VCAP_SERVICES
//"github.com/cloudfoundry-community/go-cfenv"
) const (
DEFAULT_PORT = "8080"
) var templ = template.Must(template.New("qr").Parse(templateStr)) func main() {
var port string
if port = os.Getenv("PORT"); len(port) == 0 {
port = DEFAULT_PORT
} http.HandleFunc("/", helloworld) log.Printf("Starting app on port %+v\n", port)
http.ListenAndServe(":"+port, nil)
} func helloworld(w http.ResponseWriter, req *http.Request) {
templ.Execute(w, req.FormValue("s"))
} const templateStr = `
<html>
<head>
<title>QR Link Generator</title>
</head>
<body>
{{if .}}
<img src="http://chart.apis.google.com/chart?chs=300x300&cht=qr&choe=UTF-8&chl={{.}}" />
<br>
{{.}}
<br>
<br>
{{end}}
<form action="/" name=f method="GET"><input maxLength=1024 size=70
name=s value="" title="Text to QR Encode"><input type=submit
value="Show QR" name=qr>
</form>
</body>
</html>
`
代码说明
main
之前的代码应该比較easy理解。
我们通过一个常量为server设置了默认端口。 模板变量 templ
正式有趣的地方。它构建的HTML模版将会被server执行并显示在页面中。
稍后我们将具体讨论。
main
函数解析了參数标志并使用我们讨论过的机制将 helloworld 函数绑定到server的根路径。然后调用 http.ListenAndServe
启动server。它将在server执行时处于堵塞状态。
helloworld
仅接受包括表单数据的请求,并为表单值 s
中的数据执行模板。
模板包 html/template
非常强大;该程序仅仅是浅尝辄止。 本质上。它通过在执行时将数据项中提取的元素(在这里是表单值)传给 templ.Execute
执行因而重写了HTML文本。
在模板文本(templateStr
)中,双大括号界定的文本表示模板的动作。
从 {{if .}}
到 {{end}}
的代码段仅在当前数据项(这里是点 .
)的值非空时才会执行。 也就是说,当字符串为空时,此部分模板段会被忽略。
其中两段 {{.}}
表示要将数据显示在模板中 (即将查询字符串显示在Web页面上)。HTML模板包将自己主动对文本进行转义, 因此文本的显示是安全的。
余下的模板字符串仅仅是页面载入时将要显示的HTML。假设这段解释你无法理解,请參考 文档 获得很多其它有关模板包的解释。
你最终如愿以偿了:以几行代码实现的,包括一些数据驱动的HTML文本的Webserver。 Go语言强大到能让非常多事情以短小精悍的方式解决。
步骤 4. 本地编译执行訪问
编译
你能够通过在命令行窗体执行命令:go install web1 来完毕编译。编译完毕后会在 C:\Go\bin 文件夹下生成web1的exe。
执行
通过上面的方法编译后,双击执行就可以。
也能够在命令行下切换到文件所在的文件夹,比如:C:\Go\src\web1
然后执行:go run app.go
这时可能会弹出Windows防火墙的安全提示,点击同意訪问就可以。
訪问
在浏览器中訪问,查看效果,打开浏览器。输入:http://localhost:8080/,
在文本框中输入一个URL,如(http://blog.csdn.net/testcs_dn),点击Show QR,会生成一张二维码的图片
扫一扫这张二维码看看吧
步骤 5. 上传应用程序
登录到 Bluemix™ 后,能够使用 cf push 命令来上传应用程序。
- 1、安装 Cloud Foundry 命令行界面。
- 请依据自己使用的操作系统下载相应的版本号。我使用的是Windows 7 64位操作系统,
- 下载Binaries版本号的不须要安装,直接解压到Windows文件夹就能够了。
- 以下执行的命令你能够通过訪问 https://www.ng.bluemix.net/docs/#starters/upload_app.html#upload_app__push
- 查看属于自己的命令。
- 2、连接到 Bluemix。
- 打开命令提示符窗体:開始》执行,输入“cmd”,回车
- 执行:cf api https://api.ng.bluemix.net。例如以下图:
-
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="border: none; max-width: 100%;" />
- 3、登录到 Bluemix。
- 注意,这里要换成相应你自己账户的命令!
cf login -u ivu4e@qq.com -o ivu4e@qq.com -s ivu4e
4、发出 cf push 命令时,cf 命令行界面将提供使用 buildpack 来构建并执行应用程序的 Bluemix 环境的工作文件夹。
- 从应用程序文件夹中。输入带有应用程序名称的 cf push 命令。
在 Bluemix 环境中。应用程序名称必须是唯一的。
- 后面的"-m 512m"是改动应用程序内存配额的,能够不带这个參数。例如以下图:
- 注意:执行cf push前将命令行当前文件夹切换到您刚刚创建的应用文件夹,比如我刚刚创建的C:\Go\src\web1,cf push 后面的goinfo要替换为您在Bluemix上创建的应用名称。
- 提示: 使用 cf push 命令时,cf 命令行界面会将当前文件夹中的全部文件和文件夹拷贝到 Bluemix。
确保应用程序文件夹中仅仅包括必需的文件。
cf push 命令上传应用程序并将其部署到 Bluemix。有关 cf push 的很多其它信息,请參阅 cf 命令。
- 假设更改了应用程序。能够通过再次输入 cf push 命令来上传这些更改。
cf 命令行界面会使用您先前的选项以及您对提示的响应来通过新的代码段更新应用程序的不论什么执行中实例。
步骤 6. 做个小小的測试
通过仪表板进入您刚刚创建的应用页面,点击左側的開始编码,右側顶部会显示:您的应用程序正在执行。 http://goqrcode.mybluemix.net
点击后面的链接訪问刚刚公布的应用。
在输入框中输入您想分享的URL。点击Show QRbutton就能够生成二维码图片了。
结束语
通过IBM的Bluemix云平台,我们能够轻松的将自己的应用共享到网络上;
创建Web应用之后会自己主动获得一个用来訪问应用的二级域名。
通过应用程序概述中的应用程序执行状况,能够方便的查看和管理应用执行状态;
这里通过一个小样例展示怎样将自己的应用公布到IBM的Bluemix云平台上,
怎样与Google在http://chart.apis.google.com 上提供了的图表服务交互。
假设您有更好的应用或想法,试试通过IBM的Bluemix云平台共享出来吧。
在云平台上基于Go语言+Google图表API提供二维码生成应用的更多相关文章
- java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍 我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- PHP二维码生成的方法(google APi,PHP类库,libqrencode等)
原文地址: http://blog.csdn.net/liuxinmingcode/article/details/7910975 ================================== ...
- java利用Google Zxing实现 二维码生成与解析
1.引入zxing 2.使用下面两个类:QRCodeUtil.java和BufferedImageLuminanceSource.java 3.新建单元测试类 复制下面测试代码即可. 1.pom文件中 ...
- 微信公共服务平台开发(.Net 的实现)9-------处理二维码
今天我们来共同学习一下微信公共服务平台中一个重要内容---二维码扫描.众所周知二维码目前应用范围很广,在这里不再叙述背景了,但是值得一提的是目前大家手机上面应用的二维码扫描工具是支持的都是QR码和PD ...
- Google Zxing 二维码生成与解析
生成二维码的开源项目可谓是琳琅满目,SwetakeQRCode.BarCode4j.Zxing...... 前端有JQuery-qrcode,同样能实现生成二维码. 选择Zxing的原因可能是对 Go ...
- 微信公众平台开发,模板消息,网页授权,微信JS-SDK,二维码生成(4)
微信公众平台开发,模板消息,什么是模板消息,模板消息接口指的是向用户发送重要的服务通知,只能用于符合场景的要求中去,如信用卡刷卡通知,购物成功通知等等.不支持广告营销,打扰用户的消息,模板消息类有固定 ...
- 基于jquery二维码生成插件qrcode
1.首先在页面中加入jquery库文件和qrcode插件. ? 1 2 <script type="text/javascript" src="jquery.js& ...
- 基于QRcode的带有文字+图片的二维码的Vue组件
1 <template> 2 <!-- 生成二维码开放接口: 3 二维码内容[通常为url] 4 二维码大小[限制为正方形] 二维码下方显示:文字 5 二维码中间显示:图片--> ...
随机推荐
- 项目EasyUi和JS中遇到的问题总汇
近期因为项目用到EasyUi,曾经仅仅是听过,可是没有详细用过.仅仅能一边学一边做.如今将做的过程中遇到的一些难点总结例如以下,以备后用: EsayUi使用: Json格式:key:value,key ...
- CSS布局篇——固宽、变宽、固宽+变宽
学了前端挺久了.近期写一个项目測试系统,布局时发现自己对变宽+固宽的布局还没有全然掌握,所以在这里总结一下,以后须要的时候回头看看. 1.最简单的当然是一列或多列固宽 比如两列固宽: <1> ...
- vue ---webpack 打包上线
先来描述一下期间遇到的问题有哪些: 1.打包后将 dist 文件夹和 index.html 放到 tomcat,在浏览器中访问时,出现空白页,f12 提示 404. 2.打包好的静态资源均是绝对路径 ...
- 72.挖掘CSDN密码到链表并统计密码出现次数生成密码库
list.h #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include & ...
- WSDL生成dll
--生成代理类wsdl /l:cs /n:OAWebService /out:D:OAWebService.cs D:\OAWebService.WSDL--生成dllcsc /out:D:OAWeb ...
- C#截取中英文混合字符串分行显示
private int GetStrByteLength(string str) { return System.Text.Encoding.Default.GetByteCount(str); } ...
- Native开发与JNI机制详解
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/李森 博主导读:博主不是代码大师,研究什么都很深,Java除外,所以无论什么问题,方案可以提供, ...
- [Python] Different ways to test multiple flags at once in Python
x, y, z = 0, 1, 0 if x == 1 or y == 1 or z == 1: print('passed') if 1 in (x, y, z): print('passed') ...
- 7,NULL与nullptr对比
#include <iostream> #include <array> using namespace std; void show(int num) { cout < ...
- Traveler Nobita (zoj 3456 最小生成树)
Traveler Nobita Time Limit: 2 Seconds Memory Limit: 65536 KB One day, Nobita used a time machin ...