当前位置: 首页 > news >正文

从零到一:用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服务,并实现了路由处理和表单数据处理。

相关文章:

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

使用Go语言从零开始搭建一个Web服务&#xff0c;包括环境搭建、路由处理、中间件使用、JSON和表单数据处理等关键步骤&#xff0c;提供丰富的代码示例。 关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、…...

塔子哥的环游之旅-腾讯2023笔试(codefun2000)

题目链接 塔子哥的环游之旅-腾讯2023笔试(codefun2000) 题目内容 塔子哥是一位热衷旅游的程序员。他所在的国家共有 n 个城市,编号从 1 到 n。这些城市之间有 m 条双向的交通线路,分别为飞机线路和火车线路。塔子哥起始位于编号为 1 的城市,他计划前往编号为 n 的城市进行旅游…...

力扣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…...

SOPHGO算能科技BM1684芯片修改内存布局

目录 1 问题由来 2 下载memory_edit工具 3 查看当前内存配置 3 修改内存布局 4 替换生效 参考文献&#xff1a; 1 问题由来 我在算能SE5盒子上开发的时候&#xff0c;明显感觉很慢&#xff0c;然后看了下cpu内存竟然只有2.6G 但是这个盒子出厂默认是12G的&#xff0c;于…...

CUDA实现矩阵乘法的性能优化策略

本人主要参考了https://zhuanlan.zhihu.com/p/435908830,https://zhuanlan.zhihu.com/p/410278370,https://zhuanlan.zhihu.com/p/518857175 ,下面的代码均是本人实现 矩阵乘法的easy实现-V1 C = A B , A ∈ R M K , B ∈ R K...

element ui 修改table筛选按钮为自定义按钮

element ui 修改table筛选按钮为自定义按钮 前些时间做项目的时候&#xff0c;有个需求是&#xff0c;嫌elementui 自定的筛选按钮 下拉的小三角不好看&#xff0c;需要自定义按钮。 具体的实现方法如下&#xff1a; 从阿里的图片库引入自己想要的图标。在需要修改按钮的vue页…...

面向对象编程:一切皆对象

面向对象(OOP)是一种编程范式,它使用对象来设计软件。对象可以包含数据和代码&#xff1a;数据代表对象的状态&#xff0c;而代码代表操作数据的方式。在面向对象编程中&#xff0c;一切皆对象&#xff0c;这意味着将现实世界事务使用类与实例来模拟&#xff0c;如灯&#xff0…...

GIT版本管理与分支控制

目录 1、了解Git功能 2、第一次使用Git&#xff08;首次配置好&#xff0c;后续不用再操作&#xff09; 打开git后端 设置用户签名 结果 3、初始项目架构 创建本地新仓库并初始化 文件添加到本地仓库 a.文件添加缓存区 b.缓存区内容提交到本地仓库 c.改写提交的注释 …...

大模型算法备案流程最详细说明【流程+附件】

文章目录 一、语料安全评估 二、黑盒测试 三、模型安全措施评估 四、性能评估 五、性能评估 六、安全性评估 七、可解释性评估 八、法律和合规性评估 九、应急管理措施 十、材料准备 十一、【线下流程】大模型备案线下详细步骤说明 十二、【线上流程】算法备案填报…...

JAVA GUI 基本使用

package com.lu.gui;import javax.swing.*; import java.awt.*;public class MyJFrame extends JFrame {public MyJFrame() {this.setBackground(Color.BLACK);this.setResizable(false);this.setSize(500,500);this.setTitle("登录页面");} }package com.lu.gui;imp…...

【涵子来信】——AI革新:1.新时代是便捷的,要会用

各位读者朋友们&#xff1a; 我们现在AI时代的十字路口&#xff0c;AI是为生活带来便利的&#xff0c;我们要会使用AI。今天这篇文章来讲述一下AI的正确使用。 一、 AI的使用 1.1.便捷之中要会辨别 AI是带来强大的&#xff0c;利用好可以给生活带来便捷。 像之前WWDC24宣传…...

自定义线程池实现(一)

预期目标 1.实现一个相对完备的线程池 2.自定义拒绝策略&#xff08;下一节&#xff09; 线程池的基本参数 1.核心线程数 2.超时时间 3.拒绝策略&#xff08;在下一篇中添加&#xff09; 4.工作队列 5.任务队列 工作机制 当添加一个任务到线程池中时&#xff0c;线程池会…...

计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

基于springboot+vue+uniapp的校园快递平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

这两个大龄程序员,打算搞垮一个世界软件巨头!

大家都知道&#xff0c;Adobe是多媒体和数字内容创作者的绝对王者&#xff0c;它的旗下有众多大家耳熟能详的软件&#xff1a;Photoshop、Illustrator、Premiere Pro、After Effects、InDegign、Acrobat、Animate等等。 这些软件使用门槛很高&#xff0c;价格昂贵&#xff0c;安…...

LabVIEW放大器自动测量系统

开发了一个基于LabVIEW平台的多路前置放大器自动测量系统的开发与实施。该系统集成了硬件控制与软件编程&#xff0c;能够实现放大器各项性能指标的快速自动测量&#xff0c;有效提高了测试的精确性和效率。系统设计采用了虚拟仪器技术&#xff0c;结合了先进的测量与控制策略&…...

全面整理人工智能(AI)学习路线图及资源推荐

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;掌握AI技术已经成为了许多高校研究者和职场人士的必备技能。从深度学习到强化学习&#xff0c;从大模型训练到实际应用&#xff0c;AI技术的广度和深度不断拓展。作为一名AI学习者&#xff0c;面对浩瀚的知识海…...

react antd upload custom request处理多个文件上传

react antd upload custom request处理多个文件上传的问题 背景&#xff1a;第一次请求需要请求后端返回aws 一个link&#xff0c;再往link push文件&#xff0c;再调用另一个接口告诉后端已经上传成功&#xff0c;拿到返回值。 再把返回值传给业务api... 多文件上传一直是循环…...

ALB快速实现IPv4服务的负载均衡

阿里云应用型负载均衡ALB支持HTTP、HTTPS和QUIC协议&#xff0c;专门面向网络应用层&#xff0c;提供强大的业务处理能力。 为了实现IPv4服务的负载均衡&#xff0c;需要快速创建一个ALB实例&#xff0c;并将来自客户端的访问请求转发至后端服务器。 操作流程 第一步&#x…...

【LLM】-12-部署Langchain-Chatchat-0.3.x版本

目录 1、0.3与0.2的功能对比 2、0.3.x支持多种部署方式 2.3、源码安装 2.3.1、项目源码下载 2.3.2、创建conda环境 2.3.3、安装poetry 2.3.4、安装依赖库 2.3.5、项目初始化 2.3.6、配置文件 2.3.7、初始化知识库 2.3.7、启动服务 2.3.8、配置说明 2.3.8.1、basic_…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

HTTPS证书一年多少钱?

HTTPS证书作为保障网站数据传输安全的重要工具&#xff0c;成为众多网站运营者的必备选择。然而&#xff0c;面对市场上种类繁多的HTTPS证书&#xff0c;其一年费用究竟是多少&#xff0c;又受哪些因素影响呢&#xff1f; 首先&#xff0c;HTTPS证书通常在PinTrust这样的专业平…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...