Go 开发实践:手把手教你搭建一个登录功能

news/2024/11/15 7:08:28/

本文首发自「慕课网」 ,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"及“慕课网公众号”!

作者:Codey|慕课网讲师


用 Go 语言搭建简易登录功能

如果你最近刚学习Go 语言基础特性,对 Go 语言也有了一定掌握和理解。那么接下来小慕就带你学习如何使用 Go 语言如何搭建一个提供登陆功能的 web 服务。

1. 搭建服务

在 Go 语言中想要搭建一个 http 服务是非常容易的一件事情,一行代码就可以了。

代码示例:

package mainimport ("net/http"
)func main() {http.ListenAndServe("127.0.0.1:9300", nil) //设置监听的端口
}

运行以上代码可以得到一个服务,在浏览器上输入​​http://127.0.0.1:9300/​​,由于没有编写任何路由,所以只会出现 404 的提示:

2. 编写路由

服务已经可以运行了,接下来就是要编写能被外部访问的路由接口,http 请求分为两种,POST 请求和 GET 请求。我们首先想实现的是一个网站登录页面打开的路由 ​​/index​​,需要编写一个能响应 GET 请求的路由。

代码示例:

package mainimport ("net/http"
)func main() {//设置访问的路由http.HandleFunc("/index", func(w http.ResponseWriter, r *http.Request) {if r.Method == "GET" {w.Write([]byte("<h1>Hello Codey!<h1>"))}})http.ListenAndServe("127.0.0.1:9300", nil) //设置监听的端口
}

在浏览器中输入​​127.0.0.1:9300/index​​:

此处可以结合函数式编程的思想,将 index 的处理函数拿出来作为一个变量,代码修改后如下所示

package mainimport ("net/http"
)func main() {http.HandleFunc("/index", index)           //设置访问的路由http.ListenAndServe("127.0.0.1:9300", nil) //设置监听的端口
}func index(w http.ResponseWriter, r *http.Request) {if r.Method == "GET" {w.Write([]byte("<h1>Hello Codey!<h1>"))}
}

然后修改一下输出字符串,使其输出一个页面,代码修改后如下

package mainimport ("net/http"
)func main() {http.HandleFunc("/index", index)           //设置访问的路由http.ListenAndServe("127.0.0.1:9300", nil) //设置监听的端口
}func index(w http.ResponseWriter, r *http.Request) {if r.Method == "GET" {w.Write([]byte(`<!DOCTYPE html><html><head><meta charset="utf-8"><title>Go语言实战1</title></head><body><div><h3>登录</h3><form><div><div><input type="text"  id="username" name="username" placeholder="请输入账号"></div></div><div><div><input type="password" class="form-control" id="password" name="password" placeholder="请输入密码"></div></div><div ><div ><button id="loginbtn" type="button" >登录</button></div></div></form></div></body></html>`))}
}

运行上述代码,然后再次在浏览器中输入​​127.0.0.1:9300/index​​。

3. 配置页面到 html

一般写 web 应用,会涉及到很多 html 文件,我们不可能将其全部都放在 Go 文件的字符串里,不方便调试的同时也影响代码维护。所以我们一般会直接加载 html 文件

代码示例:

package mainimport ("net/http""text/template"
)func main() {http.HandleFunc("/index", index)           //设置访问的路由http.ListenAndServe("127.0.0.1:9300", nil) //设置监听的端口
}func index(w http.ResponseWriter, r *http.Request) {if r.Method == "GET" {t, _ := template.ParseFiles("view/index.html")//加载html文件t.Execute(w, nil)//将文件输出到浏览器}
}

目录结构如下

index.html 的代码如下:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Go语言实战1</title>
</head>
<body><div><h3>登录</h3><form><div><div><input type="text"  id="username" name="username" placeholder="请输入账号"></div></div><div><div><input type="password" id="password" name="password" placeholder="请输入密码"></div></div><div ><div ><button id="loginbtn" type="button" >登录</button></div></div></form></div>
</body>
</html>

执行上述 Go 语言代码,在浏览器中输入​​127.0.0.1:9300/index​​。

4. 数据传输

在 html 页面点击登录暂时没有任何反应,为了提交页面到服务端,我们需要在服务端再编写一个接收数据的路由,这个路由需要能够接收 POST 请求。然后再这个路由中需要能验证账号密码是否正确,若是则跳转到主页,若不是则给出提示后跳转到登录页。

代码示例

package mainimport ("net/http""text/template"
)func main() {http.HandleFunc("/index", index) //设置访问的路由http.HandleFunc("/check", check)http.ListenAndServe("127.0.0.1:9300", nil) //设置监听的端口
}func check(w http.ResponseWriter, r *http.Request) {if r.Method == "POST" {accountID := r.FormValue("username")//获取账号password := r.FormValue("password")//获取密码if accountID == "Codey" && password == "12345" {//跳转到主页t, _ := template.ParseFiles("view/home.html")t.Execute(w, nil)} else {//跳转到登录w.Write([]byte("<script>alert('账号或者密码不正确')</script>"))t, _ := template.ParseFiles("view/index.html")t.Execute(w, nil)}}
}func index(w http.ResponseWriter, r *http.Request) {if r.Method == "GET" {t, _ := template.ParseFiles("view/index.html")t.Execute(w, nil)}
}

home.html 的代码如下:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Go语言实战1</title>
</head>
<body><div><h3>主页</h3>这里是主页</div>
</body>
</html>

执行上述 Go 语言代码,在浏览器中输入​​127.0.0.1:9300/index​​。

输入正确的账号:Codey,密码:12345

然后点击登录,会跳转到主页

若输入错误的账号密码,则不跳转

随后跳转回登录页面

一个简易的登录功能就搭建完成了。

你学废(hui)了吗!


欢迎关注「慕课网」官方帐号,我们会一直坚持提供IT圈优质内容,分享干货知识,大家一起共同成长吧!

本文原创发布于慕课网 ,转载请注明出处,谢谢合作


http://www.ppmy.cn/news/78760.html

相关文章

【离散数学实验报告】关系性质和闭包运算

目录 实验报告一、实验目的&#xff1a;二、实验内容&#xff1a;三、实验原理&#xff1a;四、程序代码与实验结果&#xff1a;实验内容&#xff08;1&#xff09;关系性质的判断实验内容&#xff08;2&#xff09;关系的闭包运算实验内容&#xff08;3&#xff09;Warshall算…

水表自动抄表系统有什么功能

水表自动抄表系统是一种新型的智能化管理系统&#xff0c;它可以自动采集水表的数据&#xff0c;并且实时上传到管理平台&#xff0c;实现了水表的实时监测和管理。该系统具有以下几个主要功能&#xff1a; 1.自动抄表功能 水表自动抄表系统可以实现自动采集水表的数据&#x…

知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答,本项目基于py2neo和neo4j图数据库,将知识图谱应用于菜谱领域。通过构建菜谱知识图谱,实现简单的菜谱食材问答系统。用户可以通过问答系统,快速获取简单的菜谱食材信息。 一…

华为OD机试真题 Java 实现【组装新的数组】【2023Q1 200分】

一、题目描述 给你一个整数M和数组N,N中的元素为连续整数&#xff0c;要求根据N中的元素组装成新的数组R。 组装规则&#xff1a; R中元素总和加起来等于M&#xff1b;R中的元素可以从N中重复选取&#xff1b;R中的元素最多只能有1个不在N中&#xff0c;且比N中的数字都要小…

第四章 资本主义的本质及规律

1. (单选题) 商品经济与自然经济是社会经济的两种基本形态&#xff0c;其最大区别在于&#xff0c;商品经济&#xff08; &#xff09; A. 以交换为目的 2. (单选题) 商品经济的发展经历了简单商品经济与发达商品经济两个阶段&#xff0c;资本主义商品经济是商品经济的高级…

【python案例】获取IP代理数据,筛选出符合需求的IP

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们为什么要IP代理呢&#xff1f; 当采集数据, 批量采集数据, 请求速度过快, 网站可能会把你IP封掉 <你的网络进不去这个网站> IP代理换一个IP, 再去采集请求数据 开发环境: 解释器版本: python 3.8 代码编辑…

macOS Ventura 13.5beta OpenCore黑苹果双引导分区原版镜像

镜像特点&#xff08;原文地址&#xff1a;http://www.imacosx.cn/113700.html&#xff0c;转载请注明出处&#xff09; 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引…

寒冬之下终于进华为了

大家好&#xff0c;我是帅地。 在校招的求职过程&#xff0c;华为的面试流程还是和其他公司有一点不同&#xff0c;比如华为有机试&#xff0c;只要你成绩过 100 分&#xff0c;就算是通过考核&#xff0c;也就可能被发起面试。 而且华为还有一个比较公认的点&#xff0c;就是…