GoFrame 是一款基础设施建设比较完善的模块化框架, Web Server 模块是其中比较核心的模块,我们这里将 Web 服务开发作为框架入门的选择,便于大家更容易学习和理解。

Hello World

我们先来开发一个简单的Web Server程序。

main.go

  1. package main
  2. import (
  3. "github.com/gogf/gf/v2/frame/g"
  4. "github.com/gogf/gf/v2/net/ghttp"
  5. )
  6. func main() {
  7. s := g.Server()
  8. s.BindHandler("/", func(r *ghttp.Request) {
  9. r.Response.Write("Hello World!")
  10. })
  11. s.SetPort(8000)
  12. s.Run()
  13. }

我们来看看这段代码:

  • 任何时候,您都可以通过 g.Server() 方法获得一个默认的 Server 对象,该方法采用单例模式设计, 也就是说,多次调用该方法,返回的是同一个 Server 对象。其中的g组件是框架提供的一个耦合组件,封装和初始化一些常用的组件对象,为业务项目提供便捷化的使用方式。
  • 通过Server对象的BindHandler方法绑定路由以及回调函数。在本示例中,我们绑定了/路由,并指定回调函数返回Hello World
  • 在回调函数中,输入参数为当前请求对象r *ghttp.Request,该对象包含当前请求的上下文信息。在本示例中,我们通过r.Response返回对象直接Write返回结果信息。
  • 通过SetPort方法设置当前Server监听端口。在本示例中,我们监听8000端口,如果在没有设置端口的情况下,它默认会监听一个随机的端口。
  • 通过 Run() 方法阻塞执行 Server 的监听运行。

执行结果

运行该程序,您将在终端看到类似以下日志信息:

  1. $ go run main.go
  2. 2024-10-27 21:30:39.412 [INFO] pid[58889]: http server started listening on [:8000]
  3. 2024-10-27 21:30:39.412 [INFO] {08a0b0086e5202184111100658330800} openapi specification is disabled
  4. ADDRESS | METHOD | ROUTE | HANDLER | MIDDLEWARE
  5. ----------|--------|-------|-----------------|-------------
  6. :8000 | ALL | / | main.main.func1 |
  7. ----------|--------|-------|-----------------|-------------

在默认的日志打印中包含以下信息:

  • 当前进程号58889,以及监听的地址:8000(表示监听本机所有IP地址的8000端口)。
  • 由于框架带有自动接口文档生成功能,本示例中未启用,因此提示openapi specification is disabled。 关于接口文档的自动生成,在开发手册中对应章节会详细讲解,本示例不作介绍。
  • 最后会打印当前Server的路由列表。由于我们只监听了/路由,那么这里只打印了一个路由信息。在路由信息表中:
    • ADDRESS:表示该路由的监听地址,同一个进程可以同时运行多个Server,不同的Server可以监听不同的地址。
    • METHOD:表示路由监听的HTTP Method信息,比如GET/POST/PUT/DELETE等。这里的ALL标识监听所有的HTTP Method
    • ROUTE:表示监听的具体路由地址信息。
    • HANDLER:表示路由回调函数的名称。由于本示例使用的是闭包函数,因此看到的是一个临时函数名称main.main.func1
    • MIDDLEWARE:表示绑定到当前路由的中间件函数名称,中间件是Server中一种经典的拦截器,后续章节中会有详细讲解,这里暂不做介绍。

运行后,我们尝试访问 http://127.0.0.1:8000/ 您将在页面中看到输出

img_1.png

学习小结

恭喜您!您学会了使用GoFrame框架开发第一个Web Server程序!

下一步,我们将会尝试着在Web Server中获取客户端提交的参数信息。