首页 > 其他分享 >从零到一:用Go语言构建你的第一个Web服务

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

时间:2024-08-06 16:08:21浏览次数:7  
标签:Web http err fmt 零到 Go main 路由

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

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

标签:Web,http,err,fmt,零到,Go,main,路由
From: https://www.cnblogs.com/xfuture/p/18345352

相关文章

  • HTML5 WebSocket 详解及使用
    1.WebSocket是什么?WebSocket是HTML5提供的一种在单个TCP连接上进行全双工通讯的协议。(双向通信协议)2.WebSocket的作用?实现客户端与服务器之间的双向通信,允许服务端主动向客户端推送数据。在WebSocketAPI中,浏览器和服务器只需要完成一次握手,两者之间就直......
  • uniapp中的websocket的研究,以及相关的封装
    官方文档---官方文档写的跟屎一样https://uniapp.dcloud.net.cn/api/request/websocket.html相关博客https://www.cnblogs.com/sunnyeve/p/16757633.html还是这个博客清晰https://blog.csdn.net/lyandgh/article/details/100642941......
  • ArgoWorkflow 教程(一)--DevOps 另一选择?云原生 CICD 初体验
    本文主要记录了如何使用ArgoWorkflow构建流水线,以及ArgoWorkflow中的Workflow、Template等概念模型。本文主要分析以下问题:1)如何创建流水线2)Workflow、Template、template自己的引用关系3)Workflow和Template之间的参数传递问题4)ArgoWorkflow流水线最佳实践1......
  • 计算机毕业设计django+vue出租车服务管理信息系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和共享经济的兴起,出租车服务行业正经历着前所未有的变革。传统出租车行业面临着调度效率低下、乘客体验不佳、车辆管......
  • 计算机毕业设计django+vue校园网络跳蚤市场系统的设计与应用【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及和校园生活的丰富多彩,学生们在日常学习和生活中积累了大量的二手物品,如书籍、电子产品、生活用品等。这些物品往往因为......
  • web渗透—文件上传
    文件上传一、原理1、通过文件长传模块上传一句话木马;然后用蚁剑或者cknife连接//一句话木马<?php@eval($_POST['cmd']);?>二、过滤和绕过1、前端验证原理:使用js代码对文件的类型进行限制绕过:(1)禁用Js脚本方法1:将网站源码复制带.htm文档中;删除js代码过滤的地方进行文件......
  • Django日志配置
    在配置文件配置日志LOGGING={'version':1,'disable_existing_loggers':False,#是否禁用已经存在的日志模块'handlers':{'file':{#定义日志文件记录#优先级:DEBUG、INFO、WARNING、ERROR、CRITICAL'level':......
  • 计算机毕业设计django+vue宠物销售系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着宠物市场的持续繁荣,宠物销售行业迎来了前所未有的发展机遇。然而,传统的宠物销售方式往往受限于地域、信息不对称以及管理效率低下等问......
  • 计算机毕业设计django+vue德林超市连锁超市触屏收银系统设计与实现【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,零售业正经历着前所未有的变革。传统超市在面对电商冲击和消费者需求日益多样化的背景下,亟需通过技术创新提升服务......
  • 计算机毕业设计django+vue校医院问诊预约系统没计与实现【开题+程序+论文】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的不断发展和医疗改革的深入,传统校医院的服务模式已经难以满足师生日益增长的健康需求。特别是在面对日常问诊、预约挂号、健......