💜 想真正擅长编程? 从一门课程开始,100% 免费

《笔记》第六篇 Go语言Web服务演示

第06讲 Go语言Web服务演示

视频时长: 约12分钟 核心内容: 回顾参数接收程序、使用 net/http 包搭建第一个Go Web服务器、路由注册与请求处理


一、课前回顾

上节课我们写了一段接收命令行参数的程序,核心知识点回顾:

  1. 使用 os.Args 接收命令行参数
  2. 通过 len() 计算参数长度,确定循环次数
  3. 使用 for 循环遍历并打印每个参数
  4. 两种变量声明方式:
    • 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就这么简单,而且速度很快,打包后就是一个独立的可执行文件,直接运行即可。