上篇讲了:创建PHP Web 应用程序,添加并使用语言翻译服务
通过本文学习,你将能够在IBM的云平台Bluemix上创建自己的Go语言 Web 应用程序,添加并使用语言翻译服务,发布自己的GO语言Web应用到云服务器上。
本地开发测试环境:Windows 7 x64,Go,与其它Web后端语言不同,Go语言需要自己编写Web服务器。
有关本地环境的搭建与基础学习,请参考:
《Go语言入门》如何在Windows下安装Go语言编程环境
《Go语言入门》第一个Go语言程序——HelloWorld
《Go语言入门》第一个Go语言Web程序——简单的Web服务器
IBM Bluemix 是开放式标准云平台,用于构建、运行和管理应用程序。使用 Bluemix,开发者可以集中通过灵活的计算选项、DevOps 工具的选择以及一组强大的 IBM 及第三方 API 和服务来构建卓越的用户体验。
了解更多
通过 IBM® Bluemix™,可以在 Bluemix 用户界面中创建应用程序。创建应用程序后,可以决定是继续使用 UI,使用 cf 命令行界面,还是使用 IBM Bluemix DevOps Services 来开发、跟踪、规划和部署应用程序。
在 Bluemix 中创建应用程序时,首先是创建入门模板。入门模板是一种模板,包含预定义的服务和使用特定 buildpack 配置的应用程序代码。入门模板有两种类型:样板和运行时。注: 如果绑定到应用程序的服务崩溃,那么该应用程序可能会停止运行或发生错误。Bluemix 不会自动重新启动应用程序以从这些问题中恢复。请考虑对应用程序进行编码,以便识别中断、异常和连接失败状况并从中进行恢复。请参阅应用程序不会自动重新启动故障诊断主题,以获取更多信息。
1、获取服务信息
进入自己的应用程序》概述页面,找到已经添加的服务,点击“显示凭证”,可以查看服务的具体信息:
在浏览器中访问服务URL
在浏览器请求支持的语言:
服务URL:https://gateway.watsonplatform.net/language-translation/api/v2/identifiable_languages
2、编写Go语言代码
注意:云平台上Go语言的环境与PHP的有所不同,我直接在本地创建的应用上传之后都是启动失败,
不清楚是哪里的原因!
可能是缺少manifest.yml,Procfile,Godeps\Godeps.json文件的原因。
建议最好是“下载起动器代码”,在这个基础上修改,
如下图:下载后解压到 C:\Go\src\goinfo 目录下
AJAX调用代码
//通过AJAX调用后台翻译程序
function doExecTrans(){
var txt = $("#InputText").val();
if (txt == ""){
alert("请输入要翻译的文本!");
return;
}
$("#ProgressDiv").show();
$.ajax({
type: "GET",
url: "/trans",
dataType:"json",
data: {"txt":txt},
success: function(data){
$("#ProgressDiv").hide();
console.log(data);
$("#OutputText").text(data.text);
},
error: function(data){
console.log(data);
alert( "Error Msg: " + data );
$("#ProgressDiv").hide();
}
});
}
Go语言代码
package main
// powered by: testcs_dn
// Blog: http://blog.csdn.net/testcs_dn
// Create time: 2015/11/14
//简单的Web服务
import (
"fmt"
"net/http"
"log"
"errors"
"io/ioutil"
"net/url"
"os"
"html/template"
//for extracting service credentials from VCAP_SERVICES
//"github.com/cloudfoundry-community/go-cfenv"
)
//异常捕获方法
func catch(){
if err := recover(); err != nil {
fmt.Println(err)
}
}
//错误检测方法
func checkError(err error) {
if err != nil {
fmt.Println("Fatal error ", err.Error())
os.Exit(1)
}
}
const (
DEFAULT_PORT = "8080" //默认端口号
//服务URL,注意@符号前用冒号分隔的字符串为语言翻译服务的username:password
Surl = "https://用户名:密码@gateway.watsonplatform.net/language-translation/api/v2/translate?";
)
//调用WebServices处理翻译请求
func trans(w http.ResponseWriter, r *http.Request) {
defer catch()
r.ParseForm() //解析参数,默认是不会解析的
values := url.Values{}
values.Add("source", "en") //source=en&target=es&text=hello
values.Add("target", "es")
//要翻译的文本
txt := r.FormValue("txt")
if (txt == ""){
fmt.Fprintf(w, "{\"error\":\"请输入要翻译的文本!\"}")
return
}
values.Add("text", txt)
//拼接要翻译的文本
url := Surl + values.Encode()
resp, err := http.Get(url) //改送HTTP Get请求
if err != nil {
fmt.Fprintf(w, err.Error())
return
}
if resp != nil && resp.Body != nil {
defer resp.Body.Close()
}
if resp.StatusCode != http.StatusOK {
fmt.Fprintf(w, errors.New(resp.Status).Error())
return
}
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Fprintf(w, err.Error())
return
}
if err != nil {
fmt.Fprintf(w, err.Error())
return
}
fmt.Fprintf(w, "{\"text\":\"" + string(data) + "\"}")
}
func helloworld(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("templates/index.html");
checkError(err)
err = t.Execute(w, nil)
checkError(err)
}
func main() {
var port string
if port = os.Getenv("PORT"); len(port) == 0 {
port = DEFAULT_PORT
}
http.HandleFunc("/", helloworld) //设置访问的路由
http.HandleFunc("/trans", trans) //设置访问的路由
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) // 启动静态文件服务
http.Handle("/templates/", http.FileServer(http.Dir("templates")))
log.Printf("Starting app on port %+v\n", port)
err := http.ListenAndServe(":"+port, nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
登录到 Bluemix™ 后,可以使用 cf push 命令来上传应用程序。
开始之前,您必须:cf login -u [email protected] -o [email protected] -s ivu4e
4、发出 cf push 命令时,cf 命令行界面将提供使用 buildpack 来构建并运行应用程序的 Bluemix 环境的工作目录。
点击效果图片链接可以直接在线访问,由于目前服务器还在国外,打开速度有点慢;http://goinfo.mybluemix.net/static/
在Bluemix上创建应用、添加服务、上传应用的过程步骤基本都是一样的,
不同的地方在于应用使用的语言,本地开发测试环境的搭建,以及一些相关的配置等。
注意:云平台上Go语言的环境与PHP的有所不同,我直接在本地创建的应用上传之后都是启动失败,不清楚是哪里的原因!
可能是缺少manifest.yml,Procfile,Godeps\Godeps.json文件的原因。
建议最好是“下载起动器代码”,在这个基础上修改,我之前忽略了“下载起动器代码”的作用,浪费了不少时间。
“下载起动器代码”感觉这个翻译的不够确切,改为“下载初始Hello World示例代码”是不是更好些?
创建、部署和维护 Web 应用程序都很简单,让开发人员可以更专注于应用的开发。
文档比较全面,不过感觉有些地方说的不够细,比如语言翻译服务我就没有找到如何翻译一句话或一篇文章的方法,每次只能翻译一个单词!
由于目前服务器还在国外,打开速度有点慢;希望能早日进驻国内。