使用Go语言创建一个简单的HTTP服务器的示例代码

 更新时间:2025年07月31日 08:23:07   作者:程序员爱钓鱼  
Go语言天生支持网络编程,其标准库 net/http 内置了完整的 HTTP 协议处理能力,语法简洁、性能优越,本文我们将从零开始,用Go语言构建一个基础的 HTTP 服务器,掌握Go在服务端开发中的关键能力,需要的朋友可以参考下

一、为什么选择 Go 来开发 HTTP 服务?

Go 语言天生支持网络编程,其标准库 net/http 内置了完整的 HTTP 协议处理能力,语法简洁、性能优越,非常适合用于构建高性能 Web 服务和 API 服务。

优势包括:

  • • 内置 HTTP 支持
  • • 简洁的并发模型(Goroutine)
  • • 部署简单,编译为单个可执行文件
  • • 高性能、跨平台

二、基础目标:构建一个本地 HTTP 服务

功能需求:

  • • 启动后监听本地端口(例如 8080)
  • • 支持根路径 / 请求并返回“Hello, World!”
  • • 支持 /time 请求,返回当前服务器时间
  • • 日志输出每个请求的路径和来源 IP

三、完整示例代码

package main

import (
    "fmt"
    "log"
    "net/http"
    "time"
)

// 根路径处理器
func helloHandler(w http.ResponseWriter, r *http.Request) {
    log.Printf("访问路径:%s,来源:%s\n", r.URL.Path, r.RemoteAddr)
    fmt.Fprintf(w, "Hello, World! 👋")
}

// /time 路径处理器
func timeHandler(w http.ResponseWriter, r *http.Request) {
    log.Printf("访问路径:%s,来源:%s\n", r.URL.Path, r.RemoteAddr)
    currentTime := time.Now().Format("2006-01-02 15:04:05")
    fmt.Fprintf(w, "当前服务器时间:%s", currentTime)
}

func main() {
    // 注册路由处理器
    http.HandleFunc("/", helloHandler)
    http.HandleFunc("/time", timeHandler)

    // 启动 HTTP 服务
    port := ":8080"
    log.Printf("启动 HTTP 服务,监听端口 %s\n", port)
    err := http.ListenAndServe(port, nil)
    if err != nil {
        log.Fatalf("服务器启动失败:%v", err)
    }
}

四、运行与测试

运行命令:

go run main.go

访问方式:

  1. 打开浏览器访问:
    • http://localhost:8080/ 会显示 `Hello, World!
    • http://localhost:8080/time 会显示当前服务器时间
  2. 使用 curl 测试:
curl http://localhost:8080/
curl http://localhost:8080/time

五、进阶建议

这个 HTTP 服务虽然简单,但它是后续进阶的基础。你可以继续扩展它:

  • 使用 http.ServeMux 自定义路由器
  • 增加静态文件服务(如 HTML/CSS/JS)
  • 加入 JSON 接口支持
  • 加入日志中间件
  • 将服务并发能力与 Goroutine、Channel 结合

六、小结

通过本篇,你已经成功用 Go 构建了一个完整的 HTTP 服务。这个项目虽然小巧,但是搭建微服务、开发 REST API、构建高并发服务的基础之一。

到此这篇关于使用Go语言创建一个简单的HTTP服务器的示例代码的文章就介绍到这了,更多相关Go创建HTTP服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言如何使用 Viper 来管理配置

    Go语言如何使用 Viper 来管理配置

    在现代软件开发中,良好的配置管理可以极大地提升应用的灵活性和可维护性,下面我们就来看看GO语言中如何使用 Viper 来管理配置吧
    2024-11-11
  • golang中包无法引入问题解决

    golang中包无法引入问题解决

    本文主要介绍了golang中包无法引入问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Go语言实现请求超时处理的方法总结

    Go语言实现请求超时处理的方法总结

    这篇文章主要为大家详细介绍了Go语言中实现请求的超时控制的方法,主要是通过timer和timerCtx来实现请求的超时控制,希望对大家有所帮助
    2023-05-05
  • gorm 结构体中 binding 和 msg 结构体标签示例详解

    gorm 结构体中 binding 和 msg 结构体标签示例详解

    文章介绍了Gin框架中binding和msg结构体标签的使用,包括基本用法、常用验证规则、自定义验证器、错误信息自定义、控制器使用示例、组合验证规则、跨字段验证和初始化验证器等,这些标签主要用于数据验证、自定义错误信息、参数绑定和表单验证
    2024-11-11
  • Golang通道阻塞情况与通道无阻塞实现小结

    Golang通道阻塞情况与通道无阻塞实现小结

    本文主要介绍了Golang通道阻塞情况与通道无阻塞实现小结,详细解析了通道的类型、操作方法以及垃圾回收机制,从基础概念到高级应用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Go Ticker 周期性定时器用法及实现原理详解

    Go Ticker 周期性定时器用法及实现原理详解

    这篇文章主要为大家介绍了Go Ticker 周期性定时器用法及实现原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Golang递归获取目录下所有文件方法实例

    Golang递归获取目录下所有文件方法实例

    这篇文章主要给大家介绍了关于Golang递归获取目录下所有文件的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • Golang中Channel实战技巧与一些说明

    Golang中Channel实战技巧与一些说明

    channel是Go语言内建的first-class类型,也是Go语言与众不同的特性之一,下面这篇文章主要给大家介绍了关于Golang中Channel实战技巧与一些说明的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Go简单实现协程池的实现示例

    Go简单实现协程池的实现示例

    本文主要介绍了Go简单实现协程池的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • GO语言运行环境下载、安装、配置图文教程

    GO语言运行环境下载、安装、配置图文教程

    这篇文章主要介绍了GO语言运行环境下载、安装、配置图文教程,需要的朋友可以参考下
    2017-02-02

最新评论