从零到一:用Go语言构建你的第一个Web服务

使用Go语言从零开始搭建一个Web服务,包括环境搭建、路由处理、中间件使用、JSON和表单数据处理等关键步骤,提供丰富的代码示例。

关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,阿里云认证的资深架构师,上亿营收AI产品研发负责人。

file

环境搭建

在开始开发之前,我们需要确保本地环境已经安装了Go语言开发环境。

安装Go语言

可以从Go语言官网下载适合你操作系统的安装包,并按照官网的指南进行安装。

配置开发工具

推荐使用VS Code或GoLand进行Go语言开发。以下是VS Code的配置步骤:

  1. 安装VS Code编辑器。
  2. 安装Go插件:打开VS Code,进入插件市场,搜索并安装Go插件。
  3. 配置Go开发环境:确保Go语言的安装路径已添加到系统环境变量中。

创建项目结构

创建一个新的项目文件夹,并初始化Go模块。

mkdir simple-web-server
cd simple-web-server
go mod init simple-web-server

创建HTTP服务器

我们将使用Go标准库net/http来创建一个简单的HTTP服务器。

引入必要的包

在项目根目录下创建一个名为main.go的文件,并引入必要的包。

package mainimport ("fmt""net/http"
)

创建简单的HTTP处理函数

我们需要创建一个处理函数来响应HTTP请求。

func helloHandler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, World!")
}

创建并启动HTTP服务器

main函数中,我们将创建HTTP服务器并指定端口号。

func main() {http.HandleFunc("/", helloHandler) // 设置路由fmt.Println("Starting server at port 8080")if err := http.ListenAndServe(":8080", nil); err != nil {fmt.Println("Error starting server:", err)}
}

完整的main.go文件如下:

package mainimport ("fmt""net/http"
)func helloHandler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, World!")
}func main() {http.HandleFunc("/", helloHandler) // 设置路由fmt.Println("Starting server at port 8080")if err := http.ListenAndServe(":8080", nil); err != nil {fmt.Println("Error starting server:", err)}
}

运行服务器

在终端中运行以下命令来启动服务器:

go run main.go

打开浏览器,访问http://localhost:8080,你将看到页面显示“Hello, World!”。

路由与请求处理

我们将扩展HTTP服务器,增加更多的路由和处理函数。

添加新的路由

添加一个新的处理函数来处理/greet路径的请求。

func greetHandler(w http.ResponseWriter, r *http.Request) {name := r.URL.Query().Get("name")if name == "" {name = "Guest"}fmt.Fprintf(w, "Hello, %s!", name)
}

注册新的路由

main函数中注册新的路由:

func main() {http.HandleFunc("/", helloHandler)      // 设置根路径路由http.HandleFunc("/greet", greetHandler) // 设置/greet路径路由fmt.Println("Starting server at port 8080")if err := http.ListenAndServe(":8080", nil); err != nil {fmt.Println("Error starting server:", err)}
}

测试新的路由

重新启动服务器,并访问http://localhost:8080/greet?name=Go,页面将显示“Hello, Go!”。

处理表单数据

我们将扩展服务器以处理POST请求和表单数据。

创建HTML表单

添加一个新的处理函数来显示HTML表单:

func formHandler(w http.ResponseWriter, r *http.Request) {html := `<html><body><form method="POST" action="/submit"><label for="name">Name:</label><input type="text" id="name" name="name"><input type="submit" value="Submit"></form></body></html>`fmt.Fprintf(w, html)
}

处理表单提交

添加一个新的处理函数来处理表单提交:

func submitHandler(w http.ResponseWriter, r *http.Request) {if r.Method != http.MethodPost {http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)return}name := r.FormValue("name")fmt.Fprintf(w, "Form submitted! Hello, %s!", name)
}

注册新的路由

main函数中注册新的路由:

func main() {http.HandleFunc("/", helloHandler)      // 设置根路径路由http.HandleFunc("/greet", greetHandler) // 设置/greet路径路由http.HandleFunc("/form", formHandler)   // 设置/form路径路由http.HandleFunc("/submit", submitHandler) // 设置/submit路径路由fmt.Println("Starting server at port 8080")if err := http.ListenAndServe(":8080", nil); err != nil {fmt.Println("Error starting server:", err)}
}

测试表单功能

重新启动服务器,并访问http://localhost:8080/form,填写表单并提交,页面将显示“Form submitted! Hello, [你的名字]!”

通过以上步骤,我们已经成功创建了一个简单的Go Web服务,并实现了路由处理和表单数据处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/387695.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HadoopShuffle原理剖析】基础篇二

Shuffle原理剖析 Shuffle&#xff0c;是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。分为Map端的操作和Reduce端的操作。 Shuffle过程 Map端的Shuffle Map的输出结果首先被缓存到内存&#xff0c;当缓存区容量到达80%&#xff08;缓冲区默认100MB&#xff…

通过进程协作显示图像-C#

前言 如果一个软件比较复杂或者某些情况下需要拆解&#xff0c;可以考试将软件分解成两个或多个进程&#xff0c;但常规的消息传递又不能完全够用&#xff0c;使用消息共享内存&#xff0c;实现图像传递&#xff0c;当然性能这个方面我并没有测试&#xff0c;仅是一种解决思路…

Tekion 选择 ClickHouse Cloud 提升应用性能和指标监控

本文字数&#xff1a;4187&#xff1b;估计阅读时间&#xff1a;11 分钟 作者&#xff1a;ClickHouse team 本文在公众号【ClickHouseInc】首发 Tekion 由前 Tesla CIO Jay Vijayan 于 2016 年创立&#xff0c;利用大数据、人工智能和物联网等技术&#xff0c;为其汽车客户解决…

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

01 引言 随着大数据技术的飞速发展&#xff0c;Apache Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;随着业务的扩展和技术的发展&#xff0c;企业面临着不断增加的存储成本和运维复杂性问题。为了更好地…

【数据中台】大数据管理平台建设方案(原件资料)

建设大数据管理中台&#xff0c;按照统一的数据规范和标准体系&#xff0c;构建统一数据采集&#xfe63;治理&#xfe63;共享标准、统一技术开发体系、统一接口 API &#xff0c;实现数据采集、平台治理&#xff0c;业务应用三层解耦&#xff0c;并按照统一标准格式提供高效的…

electron安装及快速创建

electron安装及快速创建 electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 详细内容见官网&#xff1a;https://www.electronjs.org/zh/docs/latest/。 今天来记录下练习中的安装过程和hello world的创建。 创建项目文件夹&#xff0c;并执行npm 初始化命…

ubuntu安装tar安装 nginx最新版本

一、需要先安装依赖 apt install gcc libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev 二、上传安装包 并解压 下载地址 nginx news tar xvf nginx-1.25.2.tar.gz 进入nginx cd nginx-1.25.2 三、编译 ./configure --prefix=/usr/local/nginx --with-htt…

Dolphinscheduler 3.2.1bug记录

问题1&#xff1a;分页只展示首页 解决方案&#xff1a; [Bug][API] list paging missing totalpage by Gallardot Pull Request #15619 apache/dolphinscheduler GitHub 问题2:Hive 数据源连接失败 解决方案&#xff1a;修改源码&#xff1a;HiveDataSourceProcessor.cla…

《深度RAG系列》 LLM 为什么选择了RAG

2023年是AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;元年&#xff0c;这一年见证了人工智能生成内容领域的巨大飞跃&#xff0c;特别是大模型的爆发&#xff0c;它们在自然语言处理、图像生成、音频处理等多个领域展现出了惊人的能力。 这些预训练…

数据结构和算法入门

1.了解数据结构和算法 1.1 二分查找 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半&#xff0c;然后比较目标值与中间元素的大小关系&#xff0c;从而确定应该在左半部分还是右半部分继续查找。这个…

花8000元去培训机构学习网络安全值得吗,学成后就业前景如何?

我就是从培训机构学的网络安全&#xff0c;线下五六个月&#xff0c;当时学费不到一万&#xff0c;目前已成功入行。所以&#xff0c;只要你下决心要入这一行&#xff0c;过程中能好好学&#xff0c;那这8000就花得值~ 因为只要学得好&#xff0c;工作两个多月就能赚回学费&am…

浅谈取样器之OS进程取样器

浅谈取样器之OS进程取样器 JMeter 的 OS 进程取样器&#xff08;OSProcess Sampler&#xff09;允许用户在 JMeter 测试计划中直接执行操作系统命令或脚本。这一功能对于需要集成系统级操作到性能测试场景中尤为有用&#xff0c;比如运行数据库备份脚本、调用系统维护命令或执…

存储引擎MyISAM和InnoDB

存储引擎&#xff1a;创建、查询、更新、删除 innoDB&#xff1a;64T、支持事物、不支持全文索引、支持缓存、支持外键、行级锁定 MyISAM&#xff1a;256T、不支持事物、支持全文索引、插入和查询速度快 memory&#xff1a;内存、不支持事物、不支持全文索引&#xff0c;临时…

不得不安利的程序员开发神器,太赞了!!

作为一名程序员&#xff0c;你是否常常为繁琐的后端服务而感到头疼&#xff1f;是否希望有一种工具可以帮你简化开发流程&#xff0c;让你专注于创意和功能开发&#xff1f;今天&#xff0c;我要向大家隆重推荐一款绝佳的开发神器——MemFire Cloud。它专为懒人开发者准备&…

KVM高级功能部署

KVM&#xff08;Kernel-based Virtual Machine&#xff09;是一个在Linux内核中实现的全虚拟化解决方案。除了基本的虚拟化功能外&#xff0c;KVM还提供了许多高级功能&#xff0c;以增强其性能、安全性和灵活性。以下是一些KVM的高级功能&#xff1a; 硬件加速&#xff1a; In…

基于Deap遗传算法在全量可转债上做因子挖掘(附python代码及全量因子数据)

原创文章第604篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 在4.x的时候&#xff0c;咱们分享过deap遗传算法挖掘因子的代码和数据&#xff0c;今天我们来升级到5.x中。 源码发布Quantlab4.2&#xff0c;Deap因子挖掘|gplearn做不到的咱们也…

全新微软语音合成网页版源码,短视频影视解说配音网页版系统-仿真人语音

源码介绍 最新微软语音合成网页版源码&#xff0c;可以用来给影视解说和短视频配音。它是TTS文本转语言&#xff0c;API接口和PHP源码。 这个微软语音合成接口的源码&#xff0c;超级简单&#xff0c;就几个文件搞定。用的是官方的API&#xff0c;试过了&#xff0c;合成速度…

Datawhale AI夏令营 AI+逻辑推理 Task2总结

Datawhale AI夏令营 AI逻辑推理 Task2总结 一、大语言模型解题方案介绍 1.1 大模型推理介绍 ​ 推理是建立在训练完成的基础上&#xff0c;将训练好的模型应用于新的、未见过的数据&#xff0c;模型利用先前学到的规律进行预测、分类和生成新内容&#xff0c;使得AI在实际应…

力扣SQL50 换座位

Problem: 626. 换座位 &#x1f468;‍&#x1f3eb; 参考题解 Code SELECT(CASEWHEN MOD(id, 2) ! 0 AND counts ! id THEN id 1WHEN MOD(id, 2) ! 0 AND counts id THEN idELSE id - 1END) AS id,student FROMseat,(SELECTCOUNT(*) AS countsFROMseat) AS seat_counts O…

C语言实现三子棋

通过一段时间的学习&#xff0c;我们已经能够较为熟练地使用分支语句&#xff0c;循环语句&#xff0c;创建函数&#xff0c;创建数组&#xff0c;创建随机数等。之前我们做过一个扫雷游戏&#xff0c;今天让我们再尝试创作一个三子棋游戏吧~ 一、三子棋游戏的思路 三子棋的游…