每一个项目都需要一个入口,才能让项目运行起来。前面章节我们提到了main目录为入口目录,main()为golang的入口函数。因此,我们在main目录下创建一个main.go文件来作为入口文件,在里面编写main()函数。
小试身手
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
Hello WorldHello World
运行测试是非常简单的,在前期我们做好准备后,在main()函数前会有一个实心绿色三角形,点击它,并选择第一个菜单来运行
运行后,将在控制台中看到输出的执行结果:
很好,我们已经成功将go跑起来了,以后,它将作为我们的博客项目入口,从这里开始运行代码。
单单一个hello world 当然是无法满足我们的项目要求的,我们可是有一堆需求等着实现呢。这里,我们重写一下main()函数,让他满足我们的需求。
iris 的使用
iris目前有2个版本,我们选择使用iris12版本。
bootstrap.go
首先,我们在根目录创建一个bootstrap.go文件,将iris的逻辑代码放在这个文件里。
整个文件的代码如下:
package irisweb
import (
"context"
"fmt"
"github.com/kataras/iris/v12"
)
type Bootstrap struct {
Application *iris.Application
Port int
LoggerLevel string
}
func New(port int, loggerLevel string) *Bootstrap {
var bootstrap Bootstrap
bootstrap.Application = iris.New()
bootstrap.Port = port
bootstrap.LoggerLevel = loggerLevel
return &bootstrap
}
func (bootstrap *Bootstrap) Serve() {
bootstrap.Application.Logger().SetLevel(bootstrap.LoggerLevel)
bootstrap.Application.Get("/", func(ctx iris.Context) {
ctx.WriteString("Hello World")
})
bootstrap.Application.Run(
iris.Addr(fmt.Sprintf("127.0.0.1:%d", bootstrap.Port)),
iris.WithoutServerError(iris.ErrServerClosed),
iris.WithoutBodyConsumptionOnUnmarshal,
)
}
整个文件比较简单:
- 一个Bootstrap 的结构体,用来存放iris的对象、tcp端口和日志记录级别信息。
- 一个New 函数,用来初始化iris,以及端口赋值、日志记录级别赋值等。
- 还有一个函数是iris启动服务函数,里面开始对iris运行进行初始化信息设置。这些配置信息在由存放在config.json中的信息得来。
bootstrap.Application.Get("/", func(ctx iris.Context) {
ctx.WriteString("Hello World")
})
这一句定义一个访问路由,匿名函数是访问这个路由的时候,会执行的函数。iris的路由配置有多种形式,支持Get/Post/Put/Delete,还支持Party对路由进行分组。
bootstrap.Application.Run(
iris.Addr(fmt.Sprintf("127.0.0.1:%d", bootstrap.Port)),
iris.WithoutServerError(iris.ErrServerClosed),
iris.WithoutBodyConsumptionOnUnmarshal,
)
这一部分的代码是使用iris鉴定指定的端口,端口就是我们在config.json中定义的端口,除了设置端口外,这里还支持增加其他配置项,比如 WithoutServerError 会忽略errors错误。WithoutBodyConsumptionOnUnmarshal 运行iris的body可以多次消费,也就是说,你在中间件中使用了body,在后续的处理函数中,还可以再次使用body。如果不设置这个配置项,body就只能使用一次,再次使用就得不到内容。
main.go
上面已经写好了iris的逻辑代码,我们还需要将它放到main.go 中,才能让代码跑起来。于是,我们将前面写的的hello world删掉,我们将main.go重写下:
package main
import (
"irisweb"
"irisweb/config"
)
func main() {
b := irisweb.New(config.ServerConfig.Port, config.ServerConfig.LogLevel)
b.Serve()
}
代码如上,这回的内容输出就不是在控制台了,现在的内容输出就变成了在浏览器输出了。来我们一起试一下,点击main.go 函数左边的绿色实心三角形,运行起来看看预期结果。
运行了之后,在浏览器输入 http://127.0.0.1:8001 访问。这里的8001端口是config.json设置的端口,如果你设置的端口不是8001,请改成你设置的端口。如果不出意外,你将看到如下的输出内容:
恭喜你,你的配置已经成功。仅仅在浏览器中输出hello world,当然是不能满足我们的需求的,下一节我们将再跟进我们的需求文档,来继续完善我们的博客网站。我们再对bootstrap.go 进行改造。
完整的项目示例代码托管在GitHub上,需要查看完整的项目代码可以到github.com/fesiong/goblog 上查看,也可以直接fork一份来在上面做修改。