第06讲 Go语言Web服务演示
视频时长: 约12分钟 核心内容: 回顾参数接收程序、使用 net/http 包搭建第一个Go Web服务器、路由注册与请求处理
一、课前回顾
上节课我们写了一段接收命令行参数的程序,核心知识点回顾:
- 使用
os.Args接收命令行参数 - 通过
len()计算参数长度,确定循环次数 - 使用
for循环遍历并打印每个参数 - 两种变量声明方式:
var关键字声明:var name type = value- 简短变量声明(自动推导):
name := value
老师还提到了Go官方文档中的快速入门示例(如查重复行、画图程序等),这些是给有编程基础的人快速上手用的,初学者先不用深究。
二、搭建第一个Go Web服务器
2.1 导入标准库
Go开发Web服务只需要标准库 net/http,无需引入任何第三方框架:
Go
package main
import (
"fmt"
"log"
"net/http"
)
fmt— 格式化输出log— 日志输出net/http— HTTP服务相关功能(Go自带,无需安装)
2.2 注册路由与启动服务
Go
func main() {
// 注册根路由处理函数
http.HandleFunc("/", demo1)
// 启动HTTP服务,监听8081端口
log.Println("服务启动...")
http.ListenAndServe(":8081", nil)
}
// 处理函数:类似Java中的HttpServletRequest/HttpServletResponse
func demo1(w http.ResponseWriter, r *http.Request) {
fmt.Println("收到请求")
}
2.3 代码解析
| 代码 | 说明 |
|---|---|
http.HandleFunc("/", demo1) |
注册路由,根路径 / 由 demo1 函数处理 |
http.ListenAndServe(":8081", nil) |
启动HTTP服务,监听8081端口 |
w http.ResponseWriter |
响应写入器(类似Java的 HttpServletResponse),用于向客户端写数据 |
r *http.Request |
请求对象(类似Java的 HttpServletRequest),包含请求信息 |
*http.Request 中的 * |
表示这是一个指针类型 |
2.4 增加多个路由
老师演示了如何增加 /user 路由:
Go
func main() {
http.HandleFunc("/", demo1)
http.HandleFunc("/user", userHandler) // 新增user路由
log.Println("服务启动...")
http.ListenAndServe(":8081", nil)
}
func userHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "User接口正常")
}
当访问 http://localhost:8081/user 时,会走到 userHandler 函数,返回正常的接口响应,和普通的Web接口效果一样。
三、Go Web开发的优势
老师在视频中重点强调了以下几点:
3.1 开发简单
- 不需要像Java那样配置Tomcat等外部服务器
- Go自带HTTP服务器,几行代码就能跑起来一个Web服务
3.2 运行速度极快
- 老师原话:"运行起来绝对被Java快"
- Go编译后直接是机器码,不需要JVM
3.3 部署方便
- 编译后就是一个独立的可执行文件(一个exe)
- 可以直接双击运行,或在CMD中运行
- 不需要安装运行环境,拷贝到任何机器上都能跑
3.4 开发自由度高
- Go虽然标准库里Web相关的东西可能不如Java丰富
- 但它做的很强大,开发Web时非常自由
- 可以自由选择各种架构和玩法
四、完整示例代码
Go
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
// 注册路由
http.HandleFunc("/", demo1)
http.HandleFunc("/user", userHandler)
// 启动服务
log.Println("服务启动,监听 8081 端口...")
err := http.ListenAndServe(":8081", nil)
if err != nil {
log.Fatal("服务启动失败:", err)
}
}
func demo1(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, Go Web!")
}
func userHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "User接口正常")
}
五、本讲小结
| 要点 | 内容 |
|---|---|
| Web服务包 | net/http(Go标准库自带) |
| 注册路由 | http.HandleFunc(path, handler) |
| 启动服务 | http.ListenAndServe(":port", nil) |
| 处理函数签名 | func(w http.ResponseWriter, r *http.Request) |
| 部署方式 | 编译为独立可执行文件,无需额外运行环境 |
老师强调: 用Go开发Web就这么简单,而且速度很快,打包后就是一个独立的可执行文件,直接运行即可。