首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年08月06日 15:04

使用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 main

import (
	"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 main

import (
	"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" 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服务,并实现了路由处理和表单数据处理。

如有帮助,请多关注
TeahLead KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。

From:https://www.cnblogs.com/xfuture/p/18345352
本文地址: http://www.shuzixingkong.net/article/844
0评论
提交 加载更多评论
其他文章 【技术积累】如何处理Feign的超时问题
在使用Feign进行微服务之间的通信时,由于网络延迟等原因,可能会出现请求超时的情况。为了解决这个问题,我们可以对Feign进行配置,设置超时时间。 配置Feign的超时时间 在使用Feign时,我们可以通过配置来设置请求的超时时间。具体地,我们可以在应用程序的配置文件中添加以下属性: feign.
Linux的netns使用总结
转载请注明出处: Linux的netns(Network Namespace)是Linux内核提供的一项强大的网络隔离功能,它能够创建多个独立的网络空间,每个空间都拥有自己独立的网络协议栈,包括网络接口(网卡)、路由表、iptables规则等。这种隔离机制使得不同的应用程序或服务可以在互不干扰的网络
探讨使用智能AI在农业养殖中的风险预警与应用
一、前言 之前写过一篇《物联网浏览器(IoTBrowser)-使用深度学习开发防浸水远程报警》文章,主要介绍了通过摄像头麦克风监测浸水报警器有无异常,当出现异常后进行紧急报警并推送微信通知,避免浸水导致房屋损失。基于深度学习和物联网技术继续探讨在农业养殖领域的应用和实践。 监测参数设置 预警微信通知
探讨使用智能AI在农业养殖中的风险预警与应用 探讨使用智能AI在农业养殖中的风险预警与应用 探讨使用智能AI在农业养殖中的风险预警与应用
洛谷P1209修理牛棚 Barn Repair
[USACO1.3] 修理牛棚 Barn Repair 题目描述 在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了 好在许多牛正在度假,所以牛棚没有住满。 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 宽度为1 自门
满客宝智慧食堂系统selectUserByOrgId接口未授权访问漏洞可直接获取管理账号密码信息
满客宝智慧食堂系统selectUserByOrgId接口未授权访问漏洞可直接获取管理账号密码信息
满客宝智慧食堂系统selectUserByOrgId接口未授权访问漏洞可直接获取管理账号密码信息 满客宝智慧食堂系统selectUserByOrgId接口未授权访问漏洞可直接获取管理账号密码信息
部署MatterMost-开源团队协作平台
前言 之前的文章有提到部署 MatterMost 的事。 本文来记录一下。 关于 MatterMost MatterMost 有点像 Slack 这种协作工具,而且和 GitLab 的集成还不错,正好我们一直在用 GitLab,所以就部署一个来试试看。 MatterMost 是一款开源的团队协作和通
[rCore学习笔记 022]多道程序与分时任务
写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 思考 上一节我们也提到了关于多道程序的放置和加载问题的事情.对比上一章的加载,我们需要把所有的APP全部都
python 音频处理(2)——提取PPG特征之whisper库的使用(2.1)
提取PPG特征之——whisper库的使用(2.1) 1 安装对应的包 方法一(自用): 直接pip即可: pip install openai-whisper 成功后如下图所示 方法二: 当时用了他这个方法环境直接崩了,已老实 conda install -c conda-forge ffmpeg
python 音频处理(2)——提取PPG特征之whisper库的使用(2.1) python 音频处理(2)——提取PPG特征之whisper库的使用(2.1) python 音频处理(2)——提取PPG特征之whisper库的使用(2.1)