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

杨志
• 阅读 1626

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

小试身手

package main

import "fmt"

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

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

运行测试是非常简单的,在前期我们做好准备后,在main()函数前会有一个实心绿色三角形,点击它,并选择第一个菜单来运行
基础配置篇:初次使用golang,创建项目入口,使用iris框架运行项目

运行后,将在控制台中看到输出的执行结果:
基础配置篇:初次使用golang,创建项目入口,使用iris框架运行项目
很好,我们已经成功将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,请改成你设置的端口。如果不出意外,你将看到如下的输出内容:
基础配置篇:初次使用golang,创建项目入口,使用iris框架运行项目

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

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

点赞
收藏
评论区
推荐文章
Irene181 Irene181
4年前
Python 为什么没有 main 函数?为什么我不推荐写 main 函数?
毫无疑问Python中没有所谓的main入口函数,但是网上经常看到一些文章提“Python的main函数”、“建议写main函数”……有些人是知情的,他的意图可能是模仿那些正宗的main函数,但还有不少人明显是被误导了(或自己误解了),就写出来很累赘的代码。本期“Python为什么”栏目来聊聊Python为什么没有main函数
Easter79 Easter79
3年前
vue iview element
首先安装babelpolyfillnpminstallbabelpolyfillsavedev入口文件引用,在main.js中引用import'babelpolyfill'配置文件webpack.base.conf.js修改entry:{app:'./src/main.j
科工人 科工人
4年前
go的三个运行基本命令的区别,go run ,go build 和 go install
最近在自学go,遇到点基础的问题,通过自己实际操作之后得出结论在实际操作之前,我们需要知道go有三种源码文件:   1,命令源码文件;声明自己属于main包,并且包含main函数的文件,每个项目只能有一个这样的文件,即程序的入口文件   2,库源码文件;不能直接被执行的源码文件   3,测试源码文件本次操作不涉及测试源码文件。gorun
Wesley13 Wesley13
3年前
Java main 函数方法:是什么?使用案例分享
什么是main方法?在Java中,main方法是Java应用程序的入口方法。程序运行时,要执行的第一个方法是main()方法。此方法与其他方法有很大不同。例如,方法的名称必须为main,方法的类型必须为publicstaticvoid,方法必须接收字符串数组的参数。您可以通过javaIDEeclipse编写下一个示例例
Stella981 Stella981
3年前
Skynet 简单的服务编写 (2)
          前面我们简单的用Skynet写了个lua服务,实现了简单的发送消息并调用输出“HelloWorld!”  而由于Skynet是网络框架,所以我们这次用Skynet写一个简单的服务来监听80端口。  具体流程如下:      1、在main文件入口内监ip为:192.168.2.5,端口为:80    
Wesley13 Wesley13
3年前
C语言
主函数程序的入口main函数不可没有,也不可出现多行main函数,main有且仅有一个。intmain()return0main前面的int指的是函数调用后返回一个整型值。int是整形。返回0,0是整数voidmain是过时的函数。库函数C语言本身提供给我们使用的函数。数据类型:char字符型
Easter79 Easter79
3年前
SpringBoot学习(五)
SpringBoot的核心1、入口类和@SpringBootApplicationSpringBoot的项目一般都会有\Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。而@SpringBootApplication注解是SpringBoot的核心
Stella981 Stella981
3年前
SpringBoot学习(五)
SpringBoot的核心1、入口类和@SpringBootApplicationSpringBoot的项目一般都会有\Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。而@SpringBootApplication注解是SpringBoot的核心
Stella981 Stella981
3年前
SpringBoot 核心配置
1\.入口类和@SpringBootApplication  SpringBoot的项目一般都会有\Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。  @SpringBootApplication注解是SpringBoot的核心注解,它其实是一个组合注解:  !(https
Stella981 Stella981
3年前
SpringBoot核心
1.基本配置1.1入口类和@SrpingBootApplicationSpringBoot通常有一个名为\Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法。在main方法中使用SpringApplicatio
Easter79 Easter79
3年前
SpringBoot核心
1.基本配置1.1入口类和@SrpingBootApplicationSpringBoot通常有一个名为\Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法。在main方法中使用SpringApplicatio
杨志
杨志
Lv1
远书归梦两悠悠,只有空床敌素秋。
文章
7
粉丝
0
获赞
0