5

基础配置篇:初次使用golang,创建项目入口,使用iris框架运行项目

 3 years ago
source link: https://studygolang.com/articles/32081
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

每一个项目都需要一个入口,才能让项目运行起来。前面章节我们提到了main目录为入口目录,main()为golang的入口函数。因此,我们在main目录下创建一个main.go文件来作为入口文件,在里面编写main()函数。

小试身手

package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}

这里简单的输出了 Hello World 到控制台中。我们先试一下运行它,看能不能得到 Hello World 的结果。

运行测试是非常简单的,在前期我们做好准备后,在main()函数前会有一个实心绿色三角形,点击它,并选择第一个菜单来运行

zUbUji3.png!mobile

运行后,将在控制台中看到输出的执行结果:

F3meYbJ.png!mobile

很好,我们已经成功将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,请改成你设置的端口。如果不出意外,你将看到如下的输出内容:

iqqiau.png!mobile

恭喜你,你的配置已经成功。仅仅在浏览器中输出hello world,当然是不能满足我们的需求的,下一节我们将再跟进我们的需求文档,来继续完善我们的博客网站。我们再对bootstrap.go 进行改造。

完整的项目示例代码托管在GitHub上,需要查看完整的项目代码可以到 github.com/fesiong/goblog 上查看,也可以直接fork一份来在上面做修改。

有疑问加站长微信联系(非本文作者)

eUjI7rn.png!mobile

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK