基于Go语言实现简易Web应用

目录

  • 前言
  • Go语言特点
  • 写在使用Go语言实现Web应用前面
  • 创建Web服务器
  • 声明一个结构体操作
  • 加入中间件的使用
  • 使用静态文件服务器
  • 最后

前言

在编程语言中,近几年问世的几个新语言都是非常不错的,比如Go、Python、 Rust等等。其中,Go语言(Golang)作为一种开源的、静态类型、快速、可靠且简洁的编程语言,逐渐成为Web开发的热门选择,越来越受到开发者的青睐。那么本文就来简单分享一下,如何通过Go语言实现一个简易的Web应用,并且总结一下使用心得,并从环境搭建开始,逐步实现路由处理、模板渲染、数据库连接等功能,帮助读者了解Go语言在Web开发中的应用。

Go语言特点

先来了解一下Go语言的特点,据官方介绍,Go语言的特点有:语法简洁,简单易学,学习曲线平缓;代码风格统一,执行性能好,开发效率高;Go语言内置的垃圾回收机制,让其拥有像Python、PHP等语言一样的的开发效率,且支持并发。

而且Go 语言在创建简单高效的 Web 服务器和应用方面有很大的优势,Go 语言提供了内置的 HTTP 包,其中包含了快速创建 Web 或文件服务器所需的实用工具,这使得使用 Go 语言创建 Web 服务器和 Web应用变得简单和高效。

写在使用Go语言实现Web应用前面

开始使用Go语言实现Web应用之前,需要再来简单啰嗦两句,使用过Go语言的读者想必都知道,大部分关于Go的使用都是在终端运行的,或者是运行在已经搭好的环境。如果新入手的开发者没有安装Go语言环境,根本无法运行所写的Go语言程序,所以这就要求入手者先去搭建自己本地Go程序运行环境。搭建Go开发环境非常简单,直接去Go官网下载对应的镜像,这里以Windows操作系统为例,进入官方下载链接All releases - The Go Programming Language 找到Windows操作系统的下载包,直接下载即可。

下载成功之后,直接打开下载之后的安装程序,即.msi文件,然后根据安装向导进行安装操作,这里不再细说。

在成功安装之后,查看验证Go安装情况,直接打开Windows的命令提示符,也就是Mac的终端,输入以下命令行进行验证:

go version

运行环境搭建之后,就可以开始着手实现Web应用了,这里进行具体实现的编辑器使用的VS Code,然后需要在VS Code安装一个支持Go语言的扩展插件,如下所示:

安装之后,在新建Go程序的时候选择使用Gin框架,这个框架据说用起来很好用,具体安装GIN框架方法,可以直接使用Go官方的包管理工具 go get进行安装:

go get -u github.com/gin-gonic/gin

安装完GIN之后,由于VS Code编辑器没有新建项目的功能,所以需要自己先去新建文件:

然后通过VS Code编辑器打开这个文件夹,打开姿势:VS Code中点击文件-->打开文件夹,然后选中新建的文件夹,然后在文件里面新建一个后缀为.go的文件,这里建main.go文件,如下所示:

打开文件夹之后,点击新建文件。

然后打开VS Code编辑器底部的终端选项,然后在终端中输入命令行:go mod init go_web 回车即可。

写到这里,意味着关于使用Go语言实现web应用的所有准备工作完成。

创建Web服务器

找到上文中新建的mian.go文件,然后在该文件中添加如下代码:

package main
import ("github.com/gin-gonic/gin"
)
func main() {r := gin.Default()r.GET("/", func(c * gin.Context) {c.JSON(200,gin.H{"message":"hello go”,})})r.Run()  // listen and serve on 100.12.78.0:8080}

上面这段代码就实现了一个简单的Web服务,使用的是gin的Default()函数来创建一个默认的gin实例。r.GET()是为了注册get请求路由,而r.Run()函数是为了启动服务。

声明一个结构体操作

由于在实际情况下需要对请求参数和响应后的数据进行分类处理,所以需要声明定义一个结构体来代表请求和响应的请求,同样是在新建的mian.go文件中继续添加代码,如下所示:

type Reque struct {Name string `json: "name"  binding:"required"`
}
type Respon struct {Message string `json: "message"`
}
func main() {r := gin.Default()r.POST("/", func(c *gin.Context) {var req Requeif err := c.ShouldBindJSON(&req); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}res := Respon{Message:"hello "+ req .Name}c.JSON(http.StatusOK, res)})r.Run() // listen and serve on 100.12.78.0:8080
}

上面代码中,定义了两个结构体Reque和Respon,其中Reque中包含一个name字段,是为了代表请求中的用户名字;Respon中包含一个message字段,是为了显示响应消息。 r.POST()函数里面,使用c.ShouldBindJSON()函数把请求数据绑定到Reque结构体中,如果请求异常会返回400错误,如果请求成功会返回一个name的响应信息。

加入中间件的使用

在应用中需要使用中间件处理请求相关的内容,比如对请求头进行处理,进行身份验证处理,那么使用的还是gin框架中内置的Logger()中间件,这里还是在新建的mian.go文件中继续添加代码,如下所示:

func main() {r := gin.New()r.Use(gin.Logger())r.POST("/",func(c *gin.Context) [var req Requeif err := c.shouldBindJsON(&req); err != nil {c.JSON(http.statusBadRequest, gin.H{"error": err.Error()})return}res := Response{Message: "hello"  + req.Name}c.JSON(http.StatusOK, res)})r.Run() // listen and serve on 100.12.78.0:8080}

上面就是新建了一个新的gin实例且使用了gin内置的Logger()中间件,这个中间件会记录每个请求的详细日志,方便发现问题。

使用静态文件服务器

在搭建web应用的时候,难免不用一些静态资源,比如图片、脚本等,这就需要一个静态文件服务器,这里依然使用gin框架的内置静态文件处理中间件,依然在新建的mian.go文件中修改代码,如下所示:

func main() {r := gin.New()r.Use(gin.Logger())r.LoadHTMLGlob("template/*")r.Static("/static", "./public")r.GET("/", func(c * gin.Context) {c.HTML(http.StatusOK, "index.tmpl", gin.H{})})r.Run()  // listen and serve on 100.12.78.0:8080}

这里使用的,就是通过把 r.LoadHTMLGlob()函数将HTML前端模板载入到程序中,然后使用 r.Static()函数把public目录下的所有静态资源文件映射到/static路由,最后在r.GET()请求函数中用c.HTML()函数给用户返回HTML前端模板。

最后

通过上文关于基于Go语言实现简易Web应用的具体实现过程,可以看出来Go语言的gin框架非常好用,而且会很快速的搭建一个简单又好用的web应用程序。从搭建环境开始,到拆分具体的实现流程和步骤,以及具体的函数使用,想必读者轻松学会了使用Go语言实现Web应用的操作了吧。需要说明一下,本文所介绍的只是较为简单的示例,希望能够读者带来一些启示,如果读者需要详尽了解和使用Go语言相关的开发使用,请移步Go官方网站进行深度学习,另外本文分享的示例较为简单,请Go语言相关大佬放过,如有疑问请在评论区留言,谢谢观赏!

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

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

相关文章

CookieSession Redis 到JWT会话管理历史

单应用时期,通常使用 Cookies 和 Session 进行会话管理。 用户登录后,服务器创建一个唯一的会话标识符(Session ID),将其存储在浏览器的 Cookies 中,并在服务端维护一个关联该标识符的会话对象。 这种方…

全国停车位收费标准接口API

1) 请求地址 接口地址https://psbg.jparking.cn/cw-gateway/cwzg/v1/near_park 2) 调用方式:HTTP post 3) 接口描述: 数据来源捷停车 不可用于商用 概不负责 4) 请求参数: {"latitude": "29.563009", //坐标"longitude&quo…

Verilog基础:编译指令`timescale

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 timescale编译指令用于指定指令后模块的时间单位和时间精度。时间单位是时间值的度量单位,例如延迟值和仿真时间;而仿真精度决定了最小可分…

集成测试如何做?

今天学习下如何进行集成测试。 什么是集成测试? 集成测试被定义为一种测试类型,其中软件模块在逻辑上集成并作为一个组进行测试。一个典型的软件项目由多个软件模块组成,由不同的程序员编码。此级别测试的目的是在集成这些软件模块时,暴露…

全网最新最全的Appium自动化:Appium常用操作之H5页面操作 --待补充!

手机chrome浏览器操作: 手机端chrome浏览器一般用于打开H5手机版网站,它的操作方式与PC端的浏览器操作(即selenium对浏览器的操作)是一模一样的,由于切换后的WebView页面也属于网页 下述的方法中部分支持在webview页面…

什么是JVM的内存模型?详细阐述Java中局部变量、常量、类名等信息在JVM中的存储位置

导航: 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 一、JVM基本介绍 二、JVM内存模型 2.0 概述 2.1 类加载子系统 2.2 运行时数据区 2.2.0 基本…

python中的输入输出

文章目录 输入函数input()例子1.如何输入获得两个字符串?(若输入abc def或abc,def)2.如何输入获得两个整数?(若输入34,567)3.如何输入后获得一个元素均为数值型的列表?(若输入12,3.4,567或[12,3.4,567]) 输出输出函数print()pr…

【上海大学《面向对象程序设计A》课程小项目报告】抽象向量类模板及其派生类

1 项目内容及要求 本项目通过设计一个抽象向量类模板,以及一个通用的向量类模板和一个字符串类作为其派生类,以满足各种应用场景中的数据存储和处理需求。 项目内容: 抽象向量类模板。派生向量类。派生字符串类。测试及异常处理。联合测试…

如何计算光伏电站的发电量?

光伏电站的发电量是衡量其性能和经济效益的关键指标。准确地预测和计算光伏电站的发电量对于投资决策、系统设计和优化至关重要。以下是一些计算光伏电站发电量的主要步骤和方法: 1、确定光伏电站的规模和配置 了解光伏电站的组件数量、类型、功率等级以及安装位置…

html和css写QQ会员页面导航

目录 1、css代码 2、html代码 效果图 1、css代码 <style>* {padding: 0;margin: 0;list-style: none;text-decoration: none;}div {margin: 30px auto;}li {float: left;height: 60px;background-color: rgb(102, 102, 102);line-height: 40px;}img {height: 100%;ma…

Vellum —— 相关特点

目录 Cloth Breaking and tearing Paneling and draping Cloth simulation Calculating mass and thickness Working with low res and high res cloth Quick moving cloth Softbody Vellum softbodies Plasticity with softbodies Constraints Stitch and slid…

Java集合常见问题

目录 Java集合 1.前言2.集合3.Collection接口类3.1 List接口3.1.1 ArrayList&#xff08;常用&#xff09;3.1.2 LinkedList&#xff08;常用&#xff09;3.1.3 Vector&#xff08;不常用&#xff09; 3.2 Set接口3.2.1 HashSet&#xff08;常用&#xff09;3.2.2 LinkedHash…

【银行测试】第三方支付功能测试点+贷款常问面试题(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、第三方支付功能…

华为快应用中自定义Slider效果

文章目录 一、前言二、实现代码三、参考链接 一、前言 在华为快应用中官方提供了<slider>控件&#xff0c;但是这个控件的限制比较多&#xff0c;比如滑块无法自定义&#xff0c;所以这里进行下自定义&#xff0c;自己修改样式。 二、实现代码 整体效果如下: 源码如下…

SL6015B降压恒流60V耐压1.5A高辉调光LED芯片 电路简单 元器件少

SL6015B是一款专为LED照明应用设计的降压恒流芯片&#xff0c;具有60V的耐压能力&#xff0c;最大输出电流可达1.5A。它采用高辉调光方式&#xff0c;通过改变输入电压或电流来调节LED的亮度。此外&#xff0c;SL6015B还具有电路简单和元器件数量少的特点&#xff0c;使其成为一…

QT-在ui界面中给QWidget增加Layout布局的两种方法

QT-在ui界面中给QWidget增加Layout布局的两种方法 方式一 在UI界面&#xff0c;用拖拽的方式加入Layout方式二 用notepad软件打开.ui文件&#xff0c;手动加入Layout代码 目标&#xff1a;去除右下角红标&#xff0c;给tab标签增加Layout属性。 方式一 在UI界面&#xff0c;用…

leetcode:前序遍历

题目描述 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目分析 这道题的难点在于&#xff0c;前序遍历一遍之后需要将数值存在数组里&#xff0c;returnsize就是数组的大小 所以我们先构建一个函数来计算节点的个数 然后我…

中国AI大模型,应该如何商业化?

虽然大模型商业化的路径较为清晰&#xff0c;目前国内厂商也都在积极探索&#xff0c;但大模型的商业化之路&#xff0c;不能仅限于商业模式的探索尝试&#xff0c;更在于解决大模型发展的底层问题。 作者|斗斗 编辑|皮爷 出品|产业家 如今&#xff0c;大模型的商业化问题再…

深度观察|近视防控乱象下,角膜塑形镜撬动百亿市场的背后…

前不久&#xff0c;“晒眼皮”莫名上了热搜。顾名思义&#xff0c;就是在太阳底下闭眼&#xff0c;让眼皮享受日光浴。 不少近视患者相信&#xff0c;这种做法可以延缓近视&#xff0c;甚至可以让近视度数“清零”。毫无疑问&#xff0c;这是一个收割智商税的做法&#xff0c;…

敏捷开发迭代缺陷统计的重要性

在敏捷开发中&#xff0c;迭代缺陷统计具有重要性&#xff0c;对团队和项目具有多方面的影响&#xff1a; 早期发现和解决问题&#xff1a; 迭代缺陷统计允许团队及时识别和定位在迭代中出现的问题。这有助于早期解决问题&#xff0c;避免问题扩大化&#xff0c;并最大程度地减…