beego官网https://beego.me/,如何安装与配置,首先查看官网提示。
按照提示,在shell中下载安装beego
go get github.com/astaxie/beego
安装bee工具
go get -u github.com/beego/bee
结果报错
sszxrmc:~ sszxr$ go get -u github.com/beego/bee
# github.com/beego/bee
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Security.framework/Security.tbd and library file /System/Library/Frameworks//Security.framework/Security are out of sync. Falling back to library file for linking.
sszxrmc:~ sszxr$
最终只能直接下载
sszxrmc:~ sszxr$ git clone https://github.com/beego/bee.git
Cloning into 'bee'...
remote: Enumerating objects: 405, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (329/329), done.
remote: Total 4153 (delta 82), reused 329 (delta 64), pack-reused 3748
Receiving objects: 100% (4153/4153), 3.39 MiB | 246.00 KiB/s, done.
Resolving deltas: 100% (2073/2073), done.
sszxrmc:~ sszxr$
把下载的文件移动到go/src/github.com/beego
下面
然后在go/src目录下用bee命令创建一个项目
bee new hello
项目名称为hello
sszxrmc:src sszxr$ bee new hello
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.10.0
2018/11/09 17:50:41 INFO ▶ 0001 Creating application...
create /Users/sszxr/go/src/hello/
create /Users/sszxr/go/src/hello/conf/
create /Users/sszxr/go/src/hello/controllers/
create /Users/sszxr/go/src/hello/models/
create /Users/sszxr/go/src/hello/routers/
create /Users/sszxr/go/src/hello/tests/
create /Users/sszxr/go/src/hello/static/
create /Users/sszxr/go/src/hello/static/js/
create /Users/sszxr/go/src/hello/static/css/
create /Users/sszxr/go/src/hello/static/img/
create /Users/sszxr/go/src/hello/views/
create /Users/sszxr/go/src/hello/conf/app.conf
create /Users/sszxr/go/src/hello/controllers/default.go
create /Users/sszxr/go/src/hello/views/index.tpl
create /Users/sszxr/go/src/hello/routers/router.go
create /Users/sszxr/go/src/hello/tests/default_test.go
create /Users/sszxr/go/src/hello/main.go
2018/11/09 17:50:41 SUCCESS ▶ 0002 New application successfully created!
sszxrmc:src sszxr$
进入hello项目,执行命令bee run
sszxrmc:hello sszxr$ bee run
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.10.0
2018/11/09 17:59:42 INFO ▶ 0001 Using 'hello' as 'appname'
2018/11/09 17:59:42 INFO ▶ 0002 Initializing watcher...
hello/controllers
hello/routers
hello
2018/11/09 17:59:44 SUCCESS ▶ 0003 Built Successfully!
2018/11/09 17:59:44 INFO ▶ 0004 Restarting 'hello'...
2018/11/09 17:59:44 SUCCESS ▶ 0005 './hello' is running...
2018/11/09 17:59:44.662 [I] [asm_amd64.s:1333] http server Running on http://:8080
成功启动项目
接下来打开浏览器,输入http://localhost:8080/
效果如下
此时,终端窗口会显示监听到了get请求
2018/11/09 18:01:37.460 [D] [server.go:2741] | ::1| 200 | 1.993092ms| match| GET / r:/
2018/11/09 18:01:37.480 [D] [server.go:2741] | ::1| 200 | 136.556µs| match| GET /static/js/reload.min.js
2018/11/09 18:02:33.016 [D] [server.go:2741] | ::1| 200 | 2.857898ms| match| GET / r:/
项目文件结构
sszxr:hello sszxr$ tree
.
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
│ └── reload.min.js
├── tests
│ └── default_test.go
└── views
└── index.tpl
10 directories, 7 files
sszxr:hello sszxr$
首先来看看项目下的文件夹和文件
里面有一个文件app.conf
,内容如下
appname = hello
httpport = 8080
runmode = dev
也就是配置文件。包括项目名称,监听端口等信息,可以根据需要修改。后续开发过程中,可以在这里添加一些其他配置。
里面有一个文件default.go
,这里放的就是主要的go程序代码,每个项目的主程序逻辑都放在这里。
package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "[email protected]"
c.TplName = "index.tpl"
}
这一段代码就是浏览器访问localhost:8080
时候,后端响应的代码。也就是当浏览器访问localhost:8080
的时候,后端会把index.tpl
这个页面展示给前端,并写入两个数据,网址(Website)和邮件(Email)信息。这个index.tpl
放在项目根目录的views
文件夹下。其实就是个模板文件,也就是和html文件内容是一样的,就是前端浏览器看到的页面。
里面只有一个文件router.go
,代码如下
package routers
import (
"goblog/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
}
这里是路由控制,就是访问哪个路径,或者说访问哪个URL,会触发哪个函数,执行哪些主程序逻辑。
里面有css、img、js三个文件夹,这里是放置静态文件的,包括css文件(模板渲染),图片,js文件。
里面有一个test.go
文件,这里是放置测试代码的。
这里是放置模板文件的,里面有一个文件index.tpl
,内容如下
<html>
<head>
<title>Beegotitle>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" href="data:image/png;base64,g==" type="image/x-icon" />
<style type="text/css">
*,body {
margin: 0px;
padding: 0px;
}
body {
margin: 0px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 20px;
background-color: #fff;
}
header,
footer {
width: 960px;
margin-left: auto;
margin-right: auto;
}
.logo {
background-image: url('data:image/png;base64,iVBORuQmCC');
background-repeat: no-repeat;
-webkit-background-size: 100px 100px;
background-size: 100px 100px;
background-position: center center;
text-align: center;
font-size: 42px;
padding: 250px 0 70px;
font-weight: normal;
text-shadow: 0px 1px 2px #ddd;
}
header {
padding: 100px 0;
}
footer {
line-height: 1.8;
text-align: center;
padding: 50px 0;
color: #999;
}
.description {
text-align: center;
font-size: 16px;
}
a {
color: #444;
text-decoration: none;
}
.backdrop {
position: absolute;
width: 100%;
height: 100%;
box-shadow: inset 0px 0px 100px #ddd;
z-index: -1;
top: 0px;
left: 0px;
}
style>
head>
<body>
<header>
<h1 class="logo">Welcome to Beegoh1>
<div class="description">
Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra.
div>
header>
<footer>
<div class="author">
Official website:
<a href="http://{{.Website}}">{{.Website}}a> /
Contact me:
<a class="email" href="mailto:{{.Email}}">{{.Email}}a>
div>
footer>
<div class="backdrop">div>
<script src="/static/js/reload.min.js">script>
body>
html>
这就是刚才用浏览器打开localhost:8080
所看到的页面,内容完全是html模板内容,只不过文件后缀是.tpl
,和放.html
文件效果完全一样,没有区别。
main
文件main.go
文件,里面只有一点点内容
package main
import (
"github.com/astaxie/beego"
_ "goblog/routers"
)
func main() {
beego.Run()
}
运行main文件,就启动了项目,运行后,会执行函数beego.Run()
,这个函数会从配置文件里查找网址,端口等信息,启动监听。