Golang如何实现简单的JSON API服务

答案:使用Golang标准库net/http和encoding/json可快速构建JSON API服务。定义User结构体并用json标签指定字段名,通过http.HandleFunc注册/user和/health路由,分别返回JSON数据和健康检查响应。在处理函数中设置Content-Type为application/json,利用json.NewEncoder将结构体编码为JSON输出。支持GET请求获取用户信息,也可扩展POST请求解析JSON输入,使用json.NewDecoder解码请求体并返回创建结果。启动服务监听8080端口,通过curl浏览器测试接口正常返回数据。

golang如何实现简单的json api服务

用Golang实现一个简单的JSON API服务并不复杂,核心是使用标准库中的 net/httpencoding/json。下面是一个完整的示例,展示如何创建一个返回JSON数据的HTTP服务。

1. 定义数据结构和路由处理函数

先定义一个结构体来表示要返回的数据,并编写处理请求的函数:

package main

import ("encoding/json""net/http")

type User struct {ID int json:"id"Name string json:"name"Email string json:"email"}

func getUser(w http.ResponseWriter, r *http.Request) {user := User{ID: 1,Name: "Alice",Email: "alice@example.com",}

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

}

说明:
- 使用 json: 标签控制字段在JSON中的名称。
- 设置响应头为 application/json,确保客户端正确解析。
- 使用 json.NewEncoder(w).Encode() 直接将结构体写入响应流。

2. 启动HTTP服务器并注册路由

在 main 函数中设置路由并启动服务:

立即学习“go语言免费学习笔记(深入)”;

func main() {    http.HandleFunc("/user", getUser)
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {    w.WriteHeader(http.StatusOK)    w.Write([]byte("OK"))})println("Server is running on :8080")http.ListenAndServe(":8080", nil)

}

说明:
- 使用 http.HandleFunc 注册路径与处理函数的映射。
- 添加一个简单的健康检查接口 /health,用于测试服务是否正常。
- 调用 ListenAndServe 启动服务器,默认监听本地8080端口。

3. 测试API

运行程序后,打开终端或浏览器测试:

访问 http://localhost:8080/user,会返回JSON:{"id":1,"name":"Alice","email":"alice@example.com"}访问 http://localhost:8080/health,返回纯文本 OK。

也可以用 curl 测试:

curl -s http://localhost:8080/user | python -m json.tool

4. 处理POST请求(可选扩展)

如果需要接收JSON输入,可以这样处理:

func createUser(w http.ResponseWriter, r *http.Request) {    if r.Method != "POST" {        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)        return    }
var user Usererr := json.NewDecoder(r.Body).Decode(&user)if err != nil {    http.Error(w, "Invalid JSON", http.StatusBadRequest)    return}// 模拟保存成功,返回带ID的结果user.ID = 100w.Header().Set("Content-Type", "application/json")w.WriteHeader(http.StatusCreated)json.NewEncoder(w).Encode(user)

}

然后在 main 中注册:
http.HandleFunc("/user", createUser)(注意区分GET/POST)

基本上就这些。Golang的标准库足够应付大多数简单API场景,无需引入框架也能快速搭建稳定服务。关键点是设置正确的Content-Type、使用结构体标签、合理处理错误。后续可扩展日志、中间件、路由分组等功能。

以上就是Golang如何实现简单的JSON API服务的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1409793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月16日 02:46:50
下一篇 2025年12月16日 02:47:01

相关推荐

  • c语言中qsort怎么用

    qsort函数使用快速排序算法,按升序对元素进行排序。用法如下:void qsort(void base, size_t num, size_t size, int (compar)(const void , const void ));参数:base(要排序的元素数组的首地址)、num(数组中元素…

    2025年12月18日
    000
  • c语言srand怎么用

    srand() 函数使用:设置伪随机数生成器的种子,该种子决定后续随机数生成序列。 C 语言中 srand() 函数的使用 srand() 函数是 C 标准库中一个用于设置伪随机数生成器种子的函数。伪随机数生成器是一个算法,可以生成一序列看似随机的数字,但实际上是根据一个确定的种子值决定的。 语法 …

    2025年12月18日
    000
  • c语言rand函数怎么用

    rand() 函数用于生成伪随机数。使用步骤:1. 包含头文件 ;2. 播种随机数生成器 srand(种子);3. 调用 rand() 函数获取随机数(0 至 RAND_MAX)。 如何使用 C 语言的 rand() 函数 问题: rand() 函数在 C 语言中如何使用? 回答: rand() 函…

    2025年12月18日
    000
  • c语言中strcpy怎么用

    strcpy 函数在 C 中复制字符串,使用方法如下:声明目标和源字符串数组。调用 strcpy 函数,将源字符串复制到目标字符串。注意目标字符串数组必须足够大,且 strcpy 不会添加空字符,需要手动添加。替代函数:在 C11 及更高版本中,可以使用 strncpy 来指定目标字符串长度,以提高…

    2025年12月18日
    000
  • c语言头文件怎么建立

    建立 C 语言头文件的步骤包括:创建文件:”myheader.h”编写声明:函数原型、数据类型、宏包含库:#include 保护头文件:#ifndef 和 #define保存文件:包含目录(/usr/include 或 Visual Studio 目录)使用头文件:#incl…

    2025年12月18日
    000
  • c语言中sort怎么用

    sort函数用于对数组进行快速排序,需要提供一个比较函数来比较元素。该函数会修改原始数组。比较函数的实现取决于数据类型,可用于升序、降序或自定义排序。 c语言中sort的用法 sort函数是C标准库中用于对数组进行排序的函数。其原型如下: void qsort(void *base, size_t …

    2025年12月18日
    000
  • c语言n次方怎么输入

    在 C 语言中,可以通过以下两种方法输入 N 次方:使用 pow() 函数,其语法为:double pow(double base, double exponent);使用 for 循环,重复将底数乘以自身 exponent 次。 如何在 C 语言中输入 N 次方 在 C 语言中,有两种方法可以输入…

    2025年12月18日
    000
  • exit0在c语言中怎么用

    exit() 函数立即终止正在运行的程序,向父进程或操作系统返回退出状态代码。用法:exit(status),其中 status 为退出状态代码,0 表示正常退出,其他值表示异常退出。该函数不会返回任何值。 exit() 函数在 C 语言中的用法 exit() 函数用于立即终止正在运行的程序。 用法…

    2025年12月18日
    000
  • C++技术与其他现代编程语言的优缺点对比

    c++++ 与其他现代编程语言的优缺点对比为:c++ 优势: 高性能、低级控制、丰富的库生态系统。c++ 劣势: 学习曲线陡峭、手动内存管理、可移植性受限。python 优势: 学习曲线平滑、广泛的库支持、解释型语言。java 优势: 平台无关、自动内存管理、广泛应用。javascript 优势: …

    2025年12月18日
    000
  • C++ 并发编程中的死锁检测和预防

    摘要:死锁是并发编程中的一种常见错误,发生在两个或多个线程等待彼此释放资源才能继续执行时。本文介绍了如何检测和预防 c++++ 中的死锁。检测:使用工具,如 valgrind 的 helgrind 或 std::lock_guard,识别锁定顺序和潜在死锁。预防:遵循恒定的锁定顺序,以相同的顺序获取…

    2025年12月18日
    000
  • C++ 并发编程的技术内幕

    并发编程在 c++++ 中可通过多种技术实现,包括:线程:允许多个任务同时执行,共享同一内存空间。并行算法:使用多个处理核心同时执行相同操作的不同数据块。这些技术可应用于各种现实世界场景,例如多线程图像处理,以提高性能和响应能力。 C++ 并发编程的技术内幕 并发编程是现代软件开发中至关重要的一部分…

    2025年12月18日
    000
  • C++在物联网和嵌入式系统中的嵌入式Linux支持

    在物联网和嵌入式 linux 系统中,c++++ 作为嵌入式软件的开发语言受到广泛采用,主要原因在于:嵌入式 linux 通常提供 c++ 开发所需的库和工具,包括 gnu c++ 编译器和 c++ 标准库。c++ 提供了对系统级编程的支持,非常适用于物联网和嵌入式系统中资源受限的环境。c++ 具有…

    2025年12月18日
    000
  • C++与物联网和嵌入式系统中其他编程语言的比较

    c++++ 在物联网和嵌入式系统中与其他语言的对比:优点:高效性、灵活性和可移植性丰富的库支持、底层访问缺点:复杂性、手动内存管理、动态内存分配与其他语言的比较:python:易学快速开发,但性能较慢java:跨平台兼容,但运行时开销大rust:安全高效,但学习曲线陡峭实战案例:c++、python…

    2025年12月18日
    000
  • 掌握C++技术对软件工程师有何价值?

    标题:掌握 C++ 技术对软件工程师的价值 导言 C++ 是一种强大的编程语言,因其效率、性能和对底层系统的控制而受到软件工程师的推崇。掌握 C++ 技术为软件工程师提供了广泛的机会和优势。 代码示例 立即学习“C++免费学习笔记(深入)”; #include int main() { // 创建一…

    2025年12月18日
    000
  • C++在数字资产交易平台中的安全与合规

    c++++ 在数字资产交易平台的安全性与合规性方面至关重要,发挥着三重作用:内存管理和访问控制,确保内存安全和数据保护。集成合规框架,满足监管要求。数据加密,防止数据泄露和欺诈。 C++ 在数字资产交易平台中的安全与合规 在数字资产交易平台的开发中,安全性和合规性至关重要。C++ 作为一种高性能、低…

    2025年12月18日
    000
  • C++智能指针在内存管理中的作用

    智能指针是 c++++ 中自动管理内存的特殊指针,可解决内存泄漏和悬垂指针问题,提高代码安全性。它提供了多种类型的指针,包括 std::unique_ptr(唯一所有权)、std::shared_ptr(共享引用计数)和 std::weak_ptr(无引用计数)。通过智能指针,当对象不再需要时,内存…

    2025年12月18日
    000
  • 如何在C++中构建机器学习模型并处理大规模数据?

    如何在 c++++ 中构建机器学习模型并处理大规模数据:构建模型:使用 tensorflow 库定义模型架构并构建计算图。处理大规模数据:使用 tensorflow 的 datasets api 有效地加载和预处理大规模数据集。训练模型:创建 tensorprotos 来存储数据,并使用 sessi…

    2025年12月18日
    000
  • C++ 如何促进移动应用程序性能优化?

    c++++ 通过以下技术优化移动应用程序性能:内存管理:提供对内存的直接访问,提升内存使用效率。多线程:通过创建多个线程同时执行任务,提升多核设备性能。本地代码:编译为机器代码,消除中间层并提升执行速度。零拷贝:允许在内存区域间传输数据而无需复制,提升内存密集型应用程序性能。高性能容器:提供高效的数…

    2025年12月18日
    000
  • C++在移动应用云集成方面的价值

    c++++ 在移动应用云集成中价值巨大,因为它提供跨平台性、高性能和强大的生态系统。通过利用 c++ 的云集成库,开发人员可以轻松连接移动应用和云服务,从而增强功能和可扩展性。 C++ 在移动应用云集成中的价值 引言 云计算已成为移动应用开发的基石,提供了可扩展性、灵活性,降低成本,以及增强功能等诸…

    2025年12月18日
    000
  • C++与其他语言的性能比较

    在开发高性能应用程序时,c++++ 的性能优于其他语言,尤其在微基准测试中。在宏基准测试中,其他语言如 java 和 c# 的便利性和优化机制可能表现更好。在实战案例中,c++ 在图像处理、数值计算和游戏开发中表现出色,其对内存管理和硬件访问的直接控制带来明显的性能优势。 C++ 与其他语言的性能比…

    2025年12月18日
    000

发表回复

登录后才能评论
关注微信