本文首发自「慕课网」(www.imooc.com) ,想理解更多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圈优质内容,分享干货常识,大家一起独特成长吧!

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