”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Go 中的 Web 服务 Api 服务器

Go 中的 Web 服务 Api 服务器

发布于2024-07-31
浏览:335

Web Service Api Server in Go

在本章中,我们将介绍 go 和 Json Web 编程,以 API 形式创建具有响应数据类型的 API Web 服务。

  1. WEB创建API 首先准备一些样本数据
package main
import "encoding/json"
import "net/http"
import "fmt"
type student struct {
 ID string
 Name string
 Grade int
}
var data = []student{
 student{"E001", "ethan", 21},
 student{"W001", "wick", 22},
 student{"B001", "bourne", 23},
 student{"B002", "bond", 23},
}

上面的student结构体作为样本数据切片元素类型,存储在data变量中。
接下来,创建一个 user() 函数来处理 /users 端点。在此函数中,通过 r.Method() 属性进行请求类型检测过程,以查明请求类型是 Post 还是 Get 还是其他类型。

func users(w http.ResponseWriter, r *http.Request) {
 w.Header().Set("Content-Type", "application/json")
 if r.Method == "GET" {
 var result, err = json.Marshal(data)
 if err != nil {
 http.Error(w, err.Error(), http.StatusInternalServerError)
 return
 }
 w.Write(result)
 return
 }
 http.Error(w, "", http.StatusBadRequest)
}

如果请求是GET(检索数据),则数据以JSON编码
用作响应。
w.Header().Set("Content-Type", "application/json") 语句用于
确定响应类型,即 JSON。而 r.Write()
用于注册数据作为响应。
否则,如果请求无效,则使用
将响应设置为错误 http.Error() 函数。
还为 /user 端点设置一个处理程序。该端点与
的区别 上面的 /user 是:
/users 端点返回所有现有示例数据(数组)。
/user 端点仅返回一条数据,取自 data
基于其 ID 的样本。在此端点,客户端必须发送
还有正在查找的数据的ID信息

func user(w http.ResponseWriter, r *http.Request) {
 w.Header().Set("Content-Type", "application/json")
 if r.Method == "GET" {
 var id = r.FormValue("id")
 var result []byte
 var err error
 for _, each := range data {
 if each.ID == id {
 result, err = json.Marshal(each)
 if err != nil {
 http.Error(w, err.Error(), http.StatusInternalServerError)
 return
 }
 w.Write(result)
 return
 }
 }
 http.Error(w, "User not found", http.StatusNotFound)
 return
 }
 http.Error(w, "", http.StatusBadRequest)
}

r.FormValue()方法用于检索从
发送的表单数据 客户端,在此上下文中引用的数据是 ID。
通过使用该ID,可以搜索相关数据。如果有的话
作为响应返回。如果不存在,则错误 400,错误请求
返回消息“未找到用户”。
最后,实现上面的两个处理程序。

func main() {
 http.HandleFunc("/users", users)
 http.HandleFunc("/user", user)
 fmt.Println("starting web server at http://localhost:8080/")
 http.ListenAndServe(":8080", nil)
}

运行程序,现在Web服务器已上线并且可以使用数据。

版本声明 本文转载于:https://dev.to/sukmarizki04/web-service-api-server-in-go-efl?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 64 位机器上安全地将指针转换为整数?
    如何在 64 位机器上安全地将指针转换为整数?
    将指针转换为整数:针对 64 位机器重新审视在 C/C 中,处理 64 位机器时的潜在陷阱位机在处理指针时出现。传统的转换技术,如下所示,可能会导致精度错误:void function(MESSAGE_ID id, void* param) { if (id == FOO) { int ...
    编程 发布于2024-12-23
  • 如何在 Chrome 中安全打开本地 HTML 文件?
    如何在 Chrome 中安全打开本地 HTML 文件?
    如何在“--allow-file-access-from-files”模式下使用 Chrome 启动 HTML?解决此问题需要通过 Google Chrome 以“--allow-file-access-from-files”模式启动 HTML 文件。然而,尽管多次尝试实施以下步骤,但事实证明它并不...
    编程 发布于2024-12-23
  • 如何在 JavaScript 中动态生成选择元素的选项?
    如何在 JavaScript 中动态生成选择元素的选项?
    使用 JavaScript 为选择元素生成动态选项在 Web 开发中,我们经常遇到为选择元素创建动态选项的需要。如果手动完成,这可能是一项耗时的任务,尤其是在处理大量选项时。本文提供了使用 JavaScript 自动执行此过程的解决方案。使用 For 循环创建选项一种简单的方法是使用 for 循环来...
    编程 发布于2024-12-23
  • 为什么自动换行在 HTML 表格中不起作用,如何修复?
    为什么自动换行在 HTML 表格中不起作用,如何修复?
    HTML 表格中的自动换行:修复未换行的文本自动换行是一个 CSS 属性,用于使文本在元素内换行就像 div 和 span 一样。但是,它通常无法在表格单元格中工作,导致文本溢出单元格的边界。要解决此问题,您可以使用表格的 table-layout:fixed CSS 属性。此属性强制表格具有固定布...
    编程 发布于2024-12-23
  • 什么时候应该在 C++ 中使用 `std::size_t` 作为循环计数器?
    什么时候应该在 C++ 中使用 `std::size_t` 作为循环计数器?
    何时在 C 代码中使用 std::size_t问题:何时使用 C 中的循环,特别是在比较数组大小的情况下,最好使用 std::size_t 而不是像这样的原始数据类型int?示例:#include <cstdint> int main() { for (std::size_t i...
    编程 发布于2024-12-23
  • 我应该对网站上的图像使用 Base64 编码吗?
    我应该对网站上的图像使用 Base64 编码吗?
    了解以 Base64 编码图像的影响将图像转换为 Base64 编码是 Web 开发中的常见做法。然而,重要的是要了解它对文件大小和网站性能的影响。Base64 编码图像的大小增加当图像转换为 Base64 时,其大小通常会增加约 37%。这是因为Base64编码使用6位字符集来表示8位数据,导致大...
    编程 发布于2024-12-23
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-23
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-23
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-23
  • 考虑到版本特定的行为,如何正确地将 Java 数组转换为列表?
    考虑到版本特定的行为,如何正确地将 Java 数组转换为列表?
    在 Java 中将数组转换为列表:数组和列表转换之旅在数据操作领域,数组和列表之间的转换列表是 Java 等编程语言中的基础操作。然而,这种转换的复杂性可能会带来挑战,特别是由于 Java 版本之间行为的微妙变化。Arrays.asList() 行为的演变The Arrays.asList() 方法...
    编程 发布于2024-12-23
  • 为什么 Python 会抛出 UnboundLocalError?
    为什么 Python 会抛出 UnboundLocalError?
    UnboundLocalError 是如何发生的:Python 中的未绑定名称和变量绑定在 Python 中,变量绑定决定了变量的作用域和生命周期。当名称未分配值时,它被视为未绑定。这可能会导致 UnboundLocalError 异常。了解未绑定局部变量与具有显式声明的语言不同,Python 允许...
    编程 发布于2024-12-23
  • 通过“jQuery 快速入门”课程释放您的 Web 开发技能
    通过“jQuery 快速入门”课程释放您的 Web 开发技能
    您准备好提升您的 Web 开发专业知识并释放最流行的 JavaScript 库 jQuery 的强大功能了吗? LabEx 提供的“jQuery 快速入门”课程就是您的最佳选择。这个综合性的程序将引导您了解 jQuery 的基础知识,使您能够操作文档对象模型 (DOM) 并为您的网页注入迷人的交互性...
    编程 发布于2024-12-23
  • 如何在 MySQL WHERE IN() 子句中处理具有多个值的记录?
    如何在 MySQL WHERE IN() 子句中处理具有多个值的记录?
    MySQL IN () 运算符查询 MySQL 数据库时,WHERE IN () 运算符常用于根据特定条件检索行列中的值。例如,以下查询从“table”表中检索“id”列与任意值 (1、2、3、4) 匹配的所有行:SELECT * FROM table WHERE id IN (1,2,3,4);但...
    编程 发布于2024-12-23
  • 如何根据与特定值匹配的列值过滤数组行?
    如何根据与特定值匹配的列值过滤数组行?
    基于列值包含的行子集考虑一个具有多个列的数组 $arr1 和第二个平面数组 $arr2,包含特定的 id 值。目标是过滤 $arr1 以仅保留列值与 $arr2 中的任何值匹配的行。以前使用过滤函数或 array_search 的尝试已证明不成功。一个实用的解决方案涉及使用本机 PHP 函数 arr...
    编程 发布于2024-12-23
  • 如何使用 DockerMake 将多个 Docker 映像合并为一个映像?
    如何使用 DockerMake 将多个 Docker 映像合并为一个映像?
    组合多个 Docker 镜像Docker 不直接支持将多个 Docker 镜像组合成一个统一的镜像。但是,可以使用第三方工具来促进此过程。 DockerMake 就是这样一种工具,可以创建复杂的图像继承场景。使用 DockerMake 组合图像DockerMake 通过使用 YAML 文件来定义之间...
    编程 发布于2024-12-23

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3