共计 3666 个字符,预计需要花费 10 分钟才能阅读完成。
本文首发自「慕课网」(www.imooc.com),想理解更多 IT 干货内容,程序员圈内热闻,欢送关注 ” 慕课网 ” 及“慕课网公众号”!
作者:Codey| 慕课网讲师
用 Go 语言搭建繁难登录性能
如果你最近刚学习 Go 语言根底个性,对 Go 语言也有了肯定把握和了解。那么接下来小慕就带你学习如何应用 Go 语言如何搭建一个提供登陆性能的 web 服务。
1. 搭建服务
在 Go 语言中想要搭建一个 http 服务是非常容易的一件事件,一行代码就能够了。
代码示例:
package main
import ("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 main
import ("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 main
import ("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 main
import ("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 main
import (
"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 main
import (
"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 圈优质内容,分享干货常识,大家一起独特成长吧!
本文原创公布于慕课网,转载请注明出处,谢谢合作