第一个应用:main.go、g.Server() 启动与端口配置

引言

上一章我们用 gf init 生成了工程,但为了讲清原理,本章先手写一个最小应用:一个 main.go、一个 g.Server(),把它跑起来并配置监听端口。

概念

g.Server()g 包提供的门面方法,用于获取默认 Web 服务对象(类型为 *ghttp.Server)。服务对象负责路由注册与 HTTP 监听,最终通过 s.Run() 启动。监听地址与端口有两种配置方式:

  • 代码方式:s.SetAddr(":8000")s.SetPort(8000)
  • 配置文件方式:工程根目录(或 manifest/config 下)的 config.yaml 中配置 server.address

两种方式同时存在时,以官方文档"配置优先级"说明为准。端口配置属于服务配置项,官方文档 goframe.org 的服务端章节有完整字段说明。

代码示例

先写不依赖配置文件的最小版本:

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server() // 获取默认服务对象

	// 注册路由:访问 / 时返回欢迎文本
	s.BindHandler("/", func(r *ghttp.Request) {
		r.Response.Write("Hello GoFrame v2!")
	})

	s.SetPort(8000) // 等价写法:s.SetAddr(":8000")
	s.Run()         // 阻塞启动,监听 :8000
}

保存为 main.go,执行 go mod tidy 拉取依赖后运行:

go run main.go
# 浏览器访问 http://127.0.0.1:8000/ 即可看到响应

更贴近工程化的做法是把端口放进配置文件。在同目录创建 config.yaml

server:
  address: ":8000"

代码改为:

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server()
	s.BindHandler("/hello", func(r *ghttp.Request) {
		// 接口场景常直接返回 JSON
		r.Response.WriteJson(g.Map{
			"message": "hello",
		})
	})
	s.Run() // 地址从配置 server.address 读取
}

注意点

  • s.Run() 是阻塞调用,一般放在 main 末尾;程序收到退出信号时框架会做优雅退出处理。
  • 路由处理函数入参是 *ghttp.Request(下文简称 r),响应对象为 r.Response
  • 有配置文件时请把 config.yaml 放在运行目录下;使用 gf run 时框架会从工程 manifest/config 自动加载(详见第 05 章)。
  • 端口被占用、配置未生效时,先检查配置文件位置与 server.address 写法。

小结

g.Server() + BindHandler + s.Run() 就是 GoFrame v2 Web 服务的最小闭环。本章的路由是"函数注册"的雏形,后续章节会展开路由分组、中间件与规范路由。服务端更多配置项以官方文档 goframe.org 为准。

笔记加载中…