新闻中心

Golang如何用 net/http 搭建简单服务器_Golang net/http 服务器开发实战

2025-11-17
浏览次数:
返回列表
用Golang搭建HTTP服务器只需几行代码,通过net/http包实现路由、处理请求与响应。首先使用http.HandleFunc注册路径及处理函数,再调用http.ListenAndServe启动服务。示例中根路径返回“Hello, 你好!”,并可扩展多个路由如/home和/api/user。支持GET和POST请求处理,分别获取查询参数与表单数据。返回JSON时设置Content-Type为application/json,并用json.NewEncoder编码以优化内存。该方案轻量高效,适合构建简单Web服务或API。

golang如何用 net/http 搭建简单服务器_golang net/http 服务器开发实战

用 Golang 搭建一个简单的 HTTP 服务器非常直接,net/http 包提供了开箱即用的功能,不需要引入第三方框架也能快速实现路由、处理请求和返回响应。

初始化一个基础 HTTP 服务器

最简单的服务器只需要几行代码。调用 http.HandleFunc 设置路径对应的处理函数,再用 http.ListenAndServe 启动服务。

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, 你好!请求路径: %s", r.URL.Path)
    })

    fmt.Println("服务器启动在 :8080")
    http.ListenAndServe(":8080", nil)
}

运行后访问 http://localhost:8080 就能看到返回内容。这个例子中,所有请求都由匿名函数处理,w 用于写入响应,r 是请求对象,可读取路径、参数、Header 等信息。

注册多个路由处理函数

你可以为不同路径注册不同的处理逻辑。每个路径对应一个处理函数,便于组织业务。

http.HandleFunc("/home", homeHandler)
http.HandleFunc("/api/user", userHandler)

func homeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "这是首页")
}

func userHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, `{"id": 1, "name": "Tom"}`)
}

这样访问 /home/api/user 会返回不同内容。注意路径匹配是前缀匹配,更精确的路由建议配合 http.ServeMux 或使用第三方路由器如 gorilla/mux。

Whimsical Whimsical

Whimsical推出的AI思维导图工具

Whimsical 182 查看详情 Whimsical

处理 GET 和 POST 请求

通过判断 r.Method 可区分请求类型。GET 参数用 r.URL.Query() 获取,POST 表单数据用 r.ParseForm() 解析。

func handler(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
        query := r.URL.Query().Get("q")
        fmt.Fprintf(w, "搜索词: %s", query)
    }

    if r.Method == "POST" {
        r.ParseForm()
        name := r.FormValue("name")
        fmt.Fprintf(w, "收到名字: %s", name)
    }
}

前端可以用表单或 fetch 发送 POST 请求测试。记得设置 Content-Type,比如表单提交时默认是 application/x-www-form-urlencoded

返回 JSON 响应

返回结构化数据时通常用 JSON。手动拼接字符串容易出错,推荐使用 json.Marshal 并设置 Header。

import "encoding/json"

func apiHandler(w http.ResponseWriter, r *http.Request) {
    data := map[string]interface{}{
        "code": 0,
        "msg":  "success",
        "data": []string{"Go", "J*a", "Python"},
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(data)
}

设置 Content-Type 能让客户端正确解析响应。使用 json.NewEncoder(w).Encode 可直接写入响应流,节省内存。

基本上就这些。net/http 足够轻量又强大,适合搭建 API 服务或简单 Web 应用。不复杂但容易忽略细节,比如错误处理、超时控制和静态文件服务,后续可逐步扩展。

以上就是Golang如何用 net/http 搭建简单服务器_Golang net/http 服务器开发实战的详细内容,更多请关注其它相关文章!


# 无锡网站营销推广制作招聘  # 第三方  # 如何使用  # 几行  # 这是  # 你好  # 就能  # 徐州seo快速优化  # 无锡网站建设运营方案  # 多个  # 龙泉网站优化报价  # 营销推广 公众号  # 海口网站安全优化  # 仁怀网络seo推广  # 网站与微信推广  # 南通seo学堂  # 镇海宁波网站推广  # python  # 如何用  # 表单  # 与子  # 表单提交  # 路由  # ai  # 路由器  # app  # 编码  # golang  # go  # json  # 前端  # js  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: AO3同人作品网入口 AO3搜索引擎官网永久地址  微博网页版首页入口 微博电脑端官网登录链接  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  b站赚钱渠道_b站收益来源  菜鸟取件码是什么怎么查 最全查询渠道汇总  使用Pandas转换并合并DataFrame:多列映射至统一结构  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  AO3中文官网链接_AO3网页版稳定镜像站  邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策  实现分段式页面滚动导航:CSS与J*aScript教程  大麦的“候补”是什么意思 大麦候补购票规则【详解】  QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  《马克思佩恩3》早期版本曝光 UI设计曾多次调整!  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  苹果手机如何防止被恶意App追踪  AO3访问入口汇总 AO3网页版同人作品一键直达  深入理解J*aScript Promise异步执行与微任务队列  ArrayList与LinkedList核心操作的Big-O复杂度分析  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  自定义Bag-of-Words实现:处理带负号的词汇权重  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  Win11网速慢怎么解决 Win11网络设置优化解除限速  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  必由学官网快捷入口 必由学网页版在线学习平台  正确连接J*aScript到HTML实现可点击图片与自定义事件处理  sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  Angular中单选按钮的正确使用与常见陷阱解析  文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  小红书网页版入口链接分享 小红书官网直接进  如何使用纯J*aScript判断Input元素是否在特定类容器内  Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持  PDF文件体积过大处理_PDF压缩技巧详解  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  海棠账号登录入口_登录海棠账户同步阅读记录  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  顺丰国际快递查询 国际件官方查询入口  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  内存疯狂猛猛涨价:主板销量直接腰斩!  处理嵌套交互式控件:前端可访问性指南 

搜索