GoLang-Beego.Godep

GoLang-Beego.Godep

介绍
你是一个从PHP,Python,Ruby等动态语言转移到Go的web应用开发人员吗?想知道怎样使用Go开发基于web的应用程序吗?你想要知道怎样使用类似于已知的框架的方式进行开发,在那儿你能重复的利用已知的知识?
如果是这样,那么你可能已经做了一些搜索,无论是在谷歌,StackOverflow的或其他网站,以寻求一个框架来帮助你;你可能已经看到了有许多可能的选择,包括Beego,Martini和Gorilla,另外还有net/http包。
这四个当中,我尝试的最多的就是Beego。我认为,它的功能十分的丰富,但是不太复杂,因此上手是相对较快的。

地狱星星翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

Beego不是一般的web开发包。它构建在大量已存在的Go之上,提供了许多的功能,以下是提供的功能:
一个完整的ORM

缓存

支持session

国际化(i18n)

实时监测和重载

发布支持

但是同时在Beego和以前提到的动态语言的框架也有一些相似性。他们之间有足够的差异,在成为真正的生产力和精通之前需要投入一些时间。
此外,虽然Beego的文档是比较全面的,我还是感觉到它的文档在某些地方有所缺失,因为我写了这两个部分的系列文章帮助克服这个问题并帮助你学习Beego的基础。

地狱星星翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

在这个系列中,你将会了解到它是一个多么出色的框架以及它是多么的为我们这些开发者着想。具体到部分一中,我们将会包含以下内容:
安装Beego以及命令行工具Bee

创建一个项目Creating a project

动作(Actions)

视图于模板(Views / Templates)

路由

请求参数(Request Parameters)

如果你想要阅读这个系列的全部的源码,你可以在Github中查看。你可以随意的在线浏览或者克隆到本地并且拿它做实验。让我们开始吧!
在我们开始之前,确保你已经将GO语言环境配置好了。如果没有,或者你不明白我在说什么,先去看一下 Getting Started with Go 或者 this post from Bill Kennedy,然后再回来继续。

中奖啦翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

  1. 安装 Beego
    Ok,让我们从安装Beego开始。像其他一些框架和工具包(toolkit)一样,通过使用bee命令行工具来创建项目框架,Bee可以完成一些工作:
    创建一个新的应用程序

运行一个应用程序

测试一个应用程序

创建路由以及其他

Bee并不是运行Beego应用的唯一一个方法,但是我在这两部分的系列教程中将着重讲它的使用。你可以通过运行go get github.com/beego/bee来安装它。

  1. 创建核心项目
    安装完之后,在你的$GOPATH所在的目录中运行下面的命令,将会生成一个项目的框架结构,我们将其命名为sitepointgoapp
    bee new sitepointgoapp
    这将会输出类似于下面的内容:
    [INFO] Creating application.../Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/conf//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/controllers//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/models//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/routers//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/tests//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static/js//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static/css//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/static/img//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/views//Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/conf/app.conf/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/controllers/default.go/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/views/index.tpl/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/routers/router.go/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/tests/default_test.go/Users/matthewsetter/Documents/workspace/Golang/src/sitepointgoapp/main.go14-05-14 06:02:59 [SUCC] New application successfully created!
    现在,你将看到下面的文件目录结构:
    sitepointgoapp ├── conf | └── app.conf├── controllers| └── default.go├── main.go├── models├── routers | └── router.go├── static│ ├── css│ ├── img│ └── js├── tests│ └── default_test.go└── views └── index.tpl
    观察一下这些文件,我们有:
    主文件main.go

主要配置文件conf/app.conf

一个默认的控制器controllers/default.go

一个默认的测试集合tests/default_test.go

一个默认的视图模板views/index.tpl

OK,最基本的程序以及准备好了,让我们运行一下它。在项目目录$GOPATH/src/sitepointgoapp/下,运行下面的命令:
bee run
这将会加载我们的新程序。除此之外,bee还监控源文件的改动。如果检测到改动,bee将会自动的重新加载应用程序。运行完上面的命令之后,你应该会看到类似于下面的输出信息:
14-05-05 11:34:17 [INFO] Start building...14-05-05 11:34:20 [SUCC] Build was successful14-05-05 11:34:20 [INFO] Restarting sitepointgoapp ...14-05-05 11:34:20 [INFO] ./sitepointgoapp is running...2014/05/05 11:34:20 [I] Running on :8080
你可以看到应用程序已经在8080端口上运行了。在浏览器中访问http://localhost:8080/将会显示下面的输出:

Beego App Home Page

这并没有什么特别的地方,但是它的确可以正常工作了。那么,让我们动手修改扩展一下默认的控制器,添加一个新的action,以及一些自定义的路由。

中奖啦翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

  1. 添加一个新的action
    打开controllers/default.go,你可以看到一个非常简单的控制器。这是因为所有的显示逻辑被放在了视图模板中。让我们稍微修改一下这个控制器,看看如何添加视图模板变量以及如何指定一个模板文件。在default.go中,添加如下方法:
    func (main *MainController) HelloSitepoint() { main.Data["Website"] = "My Website" main.Data["Email"] = "your.email.address@example.com" main.Data["EmailName"] = "Your Name" main.TplNames = "default/hello-sitepoint.tpl"}

然我们看一下每一步的作用。我们所做的是给当前的控制器添加了一个新的方法(或action)Get,通过将main MainController指定为这个方法的接收器。
紧接着,我们初始化了三个模板变量,
Website*, EmailEmailName,把它们保存在Controller的一个叫Data的字段里面,该字段是一个map用来表示模板变量和值。
之后,我将this.TplNames的值设置为default/hello-sitepoint.tpl来指定模板文件的名称。默认情况下,Beego会在views文件夹下查找指定的文件。
因此,当这个路由起作用的时候,Beego将会填充views/default/hello-sitepoint.tpl模板,并渲染它。

中奖啦翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

视图
好了,让我们创建和它对应的视图。在views文件夹下,创建一个新的文件夹default,然后在其中创建一个名为hello-sitepoint.tpl的新文件,将下面的代码写在里面:
<header class="hero-unit"> <div class="container"> <div class="row"> <div class="hero-text"> <h1>Welcome to the Sitepoint / Beego App!</h1> <h2>This is My Test Version</h2> <p>{{.Website}} {{.Email}} {{.EmailName}}</p> </div> </div> </div></header>

如果这是你第一次在Go中使用模板,要知道一点,Beego的模板层继承自 Go 的 html/template package。想了解更多在模板中使用变量的例子,请参考text/template包中的例子
和大多数Go的包一样,html/template的功能很多,所以我在这里介绍几个相关的功能。所有的模板变量都属于全局的上下文,可以通过点操作符来访问,通过{{}}语法来嵌入。
所以,想要访问我们在之前在controller的action中定义的那山歌模板变量,可以使用{{.Website}},{{.Email}}, 和 {{.EmailName}}。

中奖啦翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

路由
Ok,我们现在有了一个新的action和对应的视图。但是我们还不能进行路由。如果我们像访问默认action之外的任何东西都会得到一个404错误页面,如下面这个截图所示。


Beego 404 Page

所以,我们需要给它添加一个路由。在routers/router.go 中,将init方法改为下面这样:
func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/hello-world", &controllers.MainController{}, "get:HelloSitepoint")}

注意最后一行,它所做的事是当我们尝试去访问/hello-world的时候,它会调用MainController中的HelloSitepoint action。保存并等一小下以便完成重新编译,之后在浏览器中打开http://localhost:8080/hello-world。如果所有的都没有问题的话,会显示出下面的页面:

Beego Hello World Route

中奖啦翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

请求参数
到目前为止,我们对这个简单的action所做的都没有问题。但是,在一个真实的程序中,我们要和请求交互,检查query string 和 POST的数据,之后做出相应的反应。那么,我们怎么在Beego中访问这些信息呢?
我们先从在query string中取出数据开始。Beego中另一个已经预定义好的值是Context Module,它包含了输入的值,封装了一个请求。
它为我们提供了以下可以访问的内容:
方法

协议

user agent

query (Get and Post data)

session 信息以及更多

让我们将这个程序变得更有趣一些,我们修改路由让它需要传入一个id的值,我们可以在action中取出改值,并将其输出。在router.go中,将/get路由修改为下面这样:
beego.Router("/hello-world/:id([0-9]+)", &controllhers.MainController{}, "get:HelloSitepoint")

现在,我们需要提供一个全部为数字的GET的值,因为我们在路由的正则中使用了([0-9]+)。保存它,并且尝试再次加载不带id的/hello-world。你有没有看到错误出现?
现在,将它改为/hello-world/213,就应该可以正常工作了。既然它没问题了,让我们保存请求信息。在Get方法中,this.TplNames之前添加下面的内容:
this.Data["Id"] = this.Ctx.Input.Param(":id")

之后,在hello-world.tpl 将{{.Id}}添加到现有的模板变量的下面。重新加载页面将会在Email Name的下面显示出213

中奖啦翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

其它翻译版本(1)

通过方法类型限制Action
Ok,今天的任务差不多完成了,但在离开前我希望介绍最后一个东西。通常,你希望将某个action的访问限制到一个或多个特定的方法。例如,你只希望通过POST请求访问一个删除路由;你只希望通过GET请求显示搜索结果。
Beego简化了通过所有方法类型的action访问,或将某个action的访问限制到一个或几个方法类型。也是在router.go中,将/hello-world路由做如下改变:
beego.Router("/hello-world/:id([0-9]+)", &controllers.中MainController{}, "get,post:Get")
这样可以允许GET或POST请求分发到/hello-world/。试使用curl进行PUT或DELETE访问,使用如下的示例并查看结果

PUT requestcurl -X PUT http://localhost:8080/hello-world/213# DELETE requestcurl -X DELETE http://localhost:8080/hello-world/213

--zxp翻译于 3 个月 前
0人顶

顶 翻译的不错哦!

结束语
我希望你们会喜欢这篇对Beego web应用框架的介绍。在第二部分中,我们将集成数据库(SQLite3),并加入数据模型、表单和验证。
在第二部分结束的时候,我们将有一个很好的应用程序,覆盖了日常使用的主要功能。
同时Beego和Go是不同于你曾使用过的动态语言,利用他们提供的功能是很简单的。
不要忘记,这一系列的代码在Github上。你可以随意的在线浏览或者复制,并验证代码。
你想到了什么?这足以去使用Go了吗?在评论中分享你的想法。
链接


****http://www.goinggo.net/2013/06/installing-go-gocode-gdb-and-liteide.html

https://groups.google.com/forum/#!topic/golang-nuts/hbNCHMIA05g

http://stackoverflow.com/questions/10105935/how-to-convert-a-int-value-to-string-in-go

http://beego.me/

https://github.com/astaxie/beego

http://golang.org/pkg/text/template/

http://golang.org/doc/effective_go.html#if

http://blog.golang.org/go-maps-in-action

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • Astronomygonova - A wrapper for libnova -- Celestial Mech...
    JumboWu阅读 8,609评论 0 41
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 开始编写Golang代码 介绍 本文主要讲述如何写一个简单的Go包和如何使用golang的工具,如何获取、编译和安...
    uncle_charlie阅读 1,584评论 0 0
  • 该资源的github地址:Qix 《Platform-native GUI library for Go》 介绍:...
    ty4z2008阅读 4,853评论 5 121
  • 工作目录 先来说说Golang的工作目录,安装好Golang后,需要做的一件事情就是设置工作目录,所有的项目、工具...
    乐百川阅读 3,089评论 0 6