1. 程式人生 > >用go語言做一個簡單的登入,大家不妨來看一下

用go語言做一個簡單的登入,大家不妨來看一下

現在的網站可以說登入註冊幾乎就是首要的,所以今天就給大家來一個簡約版的登入吧
先來給大家看一下效果吧
這裡寫圖片描述
有些過分簡潔,大家別見怪啊
接下來是成功的效果
這裡寫圖片描述
我只是提供一個思路和方法至於美化,大家隨意
接下來是失敗的效果
這裡寫圖片描述
接下來就是程式碼了
前端程式碼

<html>
<head><title>使用者登入</title></head>
<body>
    <form action="http://localhost:8080/test" method="post">
        使用者名稱:<input
type="text" name="name">
密 碼:<input type="text" name="pasw"> <input type="submit" value="登入"> </form> </body> </html>

後端程式碼

package main

import (
        "fmt"
        "io/ioutil"
        "net/http"
        "database/sql"
       _"github.com/Go-SQL-Driver/MySQL"
"reflect" ) func main() { http.HandleFunc("/test", hand) http.HandleFunc("/register",register) err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println("err") } } func hand(w http.ResponseWriter, r *http.Request) { db,err := sql.Open("mysql"
,"root:[email protected](localhost:3306)/yttzcom?charset=utf8") nam := r.FormValue("name") pas := r.FormValue("pasw") query, err := db.Query("select * from tmpdb.tmptab where name = '"+nam+"' and psw = '"+pas+"'") checkErr(err) v := reflect.ValueOf(query) fmt.Println(v) //number := printResult(query) dates :=printResult(query) w.Write([]byte(dates)) defer r.Body.Close() } func register(w http.ResponseWriter, r *http.Request){ fmt.Println("register") w.Write([]byte("there is register!")) defer r.Body.Close() body, err := ioutil.ReadAll(r.Body) if err != nil { fmt.Println("read err") } fmt.Println(string(body)) } func checkErr(errMasg error) { if errMasg != nil { panic(errMasg) } } func printResult(query *sql.Rows) string { column, _ := query.Columns() //讀出查詢出的列欄位名 values := make([][]byte, len(column)) //values是每個列的值,這裡獲取到byte裡 scans := make([]interface{}, len(column)) //因為每次查詢出來的列是不定長的,用len(column)定住當次查詢的長度 for i := range values { //讓每一行資料都填充到[][]byte裡面 scans[i] = &values[i] } results := make(map[int]map[string]string) //最後得到的map i := 0 for query.Next() { //迴圈,讓遊標往下移動 if err := query.Scan(scans...); err != nil { //query.Scan查詢出來的不定長值放到scans[i] = &values[i],也就是每行都放在values裡 fmt.Println(err) return "3" } row := make(map[string]string) //每行資料 for k, v := range values { //每行資料是放在values裡面,現在把它挪到row裡 key := column[k] row[key] = string(v) } results[i] = row //裝入結果集中 i++ } for k, v := range results { //查詢出來的陣列 fmt.Println(k) fmt.Println(v) record :="<b>登陸成功</b>\nid:"+results[k]["id"]+"\n"+"使用者名稱:"+results[k]["name"]+"\n"+"密碼:"+results[k]["psw"] return record } return "<b>使用者名稱或密碼錯誤</b>" }

是不是有人就會問,如果登入成功了怎麼跳轉頁面呢是不?其實很簡單到時只需要在登陸成功的時候加個模板,可是模板要怎麼用呢,怎樣修改模板裡面的內容呢,下面就給大家一個簡單的同樣是登入的效果,到時只需將登陸成功的模板,修改成你自己的登入成功的頁面即可,接下來是效果
這裡寫圖片描述
這裡寫圖片描述
前端程式碼

<html>
<head><title>使用者登入</title></head>
<body>
    <form action="http://localhost:8080/test" method="post">
        使用者名稱:<input type="text" name="name">
        密  碼:<input type="text" name="pasw">
        <input type="submit" value="登入">
    </form>
    <p><b> {{.Stutas}}</b></P>
</body>
</html>

後端程式碼

package main

import (
        "fmt"
        "io/ioutil"
        "net/http"
        "html/template"
        "database/sql"
       _"github.com/Go-SQL-Driver/MySQL"
        "reflect"
)
type stu struct{
    Stutas string
}
func main() {
        http.HandleFunc("/test", hand)
        http.HandleFunc("/register",register)
        http.HandleFunc("/",login)
        err := http.ListenAndServe(":8080", nil)
        if err != nil {
                fmt.Println("err")
        }
}
func login(w http.ResponseWriter, r *http.Request){
       t, _ := template.ParseFiles("loginss.html")
       t.Execute(w,"")
}
func hand(w http.ResponseWriter, r *http.Request) {
        db,err := sql.Open("mysql","root:[email protected](localhost:3306)/yttzcom?charset=utf8")
         nam := r.FormValue("name")
         pas := r.FormValue("pasw")
        query, err := db.Query("select * from tmpdb.tmptab where name = '"+nam+"' and  psw = '"+pas+"'") 
        checkErr(err)
        v := reflect.ValueOf(query)
        fmt.Println(v)
        dates :=printResult(query)
        data  :=stu{dates}
        t, _ := template.ParseFiles("loginss.html")
        t.Execute(w,data)
        defer r.Body.Close()
}
func register(w http.ResponseWriter, r *http.Request){
        fmt.Println("register")
        w.Write([]byte("there is register!"))

        defer r.Body.Close()
        body, err := ioutil.ReadAll(r.Body)
        if err != nil {
            fmt.Println("read err")
        }
        fmt.Println(string(body))
}
func checkErr(errMasg error) {  
        if errMasg != nil {  
                panic(errMasg)  
        }  
}
func printResult(query *sql.Rows) string  { 
        column, _ := query.Columns()              //讀出查詢出的列欄位名  
        values := make([][]byte, len(column))     //values是每個列的值,這裡獲取到byte裡  
        scans := make([]interface{}, len(column)) //因為每次查詢出來的列是不定長的,用len(column)定住當次查詢的長度  
        for i := range values {                   //讓每一行資料都填充到[][]byte裡面  
                scans[i] = &values[i]  
        }  
        results := make(map[int]map[string]string) //最後得到的map  
        i := 0  
        for query.Next() { //迴圈,讓遊標往下移動  
                if err := query.Scan(scans...); err != nil { //query.Scan查詢出來的不定長值放到scans[i] = &values[i],也就是每行都放在values裡  
                        fmt.Println(err)  
                        return  "3"
                }  
                row := make(map[string]string) //每行資料  
                for k, v := range values {     //每行資料是放在values裡面,現在把它挪到row裡  
                        key := column[k]  
                        row[key] = string(v)  
                }  
                results[i] = row //裝入結果集中  
                i++  
        }       
        for k, v := range results { //查詢出來的陣列
                 fmt.Println(k)
                 fmt.Println(v)
                 record :="登陸成功"+"\n"+"id:"+results[k]["id"]+"\n"+"使用者名稱:"+results[k]["name"]+"\n"+"密碼:"+results[k]["psw"]                 
                 return record               
        }
        return "使用者名稱或密碼錯誤"       
}

如果有不懂的地方,可以在下方評論和留言

相關推薦

go語言一個簡單登入大家不妨來看一下

現在的網站可以說登入註冊幾乎就是首要的,所以今天就給大家來一個簡約版的登入吧 先來給大家看一下效果吧 有些過分簡潔,大家別見怪啊 接下來是成功的效果 我只是提供一個思路和方法至於美化,大家隨意 接下來是失敗的效果 接下來就是程式碼了 前

C語言一個簡單的三子棋實現玩家與電腦的對戰

原始碼: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 寫一個三子棋 */ //邏輯: //1. 畫

c語言一個完成逆波蘭表示式

先用c語言,實現了一個棧結構,在用棧完成逆波蘭表示式。 包含中綴表示式 -》 字尾表示式, 用棧完成計算。 // main.m // 逆波蘭表示式 // // Created by 郭朝順 on 2018/5/10星期四. // Copyright © 201

Java GUI一個簡單的管理系統

java 管理系統 gui 1.先完成主頁面MainUI(代碼如下)package com.pag_1; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.

python語言一個簡單的計算器

ali pla ket 列表 調用 語言 括號 lac 跳出循環 假如我們有這樣一個式子: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )思

c語言實現一個簡單的通訊錄

通訊錄的c語言實現原始碼 簡單通訊錄的實現還是包括三個原始檔,test.c(實現通訊錄主邏輯),txl.c(實現用到的各個函式),txl.h(存放txl中用到的各種標頭檔案與宣告)。 txl.h #ifndef __TXL_H__//**txl.h** #defi

爬蟲教程」Python一個簡單爬蟲小白也能看懂的教程

俗話說“巧婦難為無米之炊”,除了傳統的資料來源,如歷史年鑑,實驗資料等,很難有更為簡便快捷的方式獲得資料,在目前網際網路的飛速發展寫,大量的資料可以通過網頁直接採集,“網路爬蟲”應運而生,本篇將會講解簡單的網路爬蟲編寫方法。   開發環境 每個人的開發環境各異,下面上是我的開發

C語言一個簡單的掃雷小遊戲

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 語言寫一個簡單的掃雷遊戲 */ // 1.寫一個遊戲選單 M

Python一個簡單爬蟲小白也能看懂的教程

俗話說“巧婦難為無米之炊”,除了傳統的資料來源,如歷史年鑑,實驗資料等,很難有更為簡便快捷的方式獲得資料,在目前網際網路的飛速發展寫,大量的資料可以通過網頁直接採集,“網路爬蟲”應運而生,本篇將會講解簡單的網路爬蟲編寫方法。 開發環境 每個人的開發環境各異,下面上是我的開發環境,對於必須的

「爬蟲教程」Python一個簡單爬蟲小白也能看懂的教程

俗話說“巧婦難為無米之炊”,除了傳統的資料來源,如歷史年鑑,實驗資料等,很難有更為簡便快捷的方式獲得資料,在目前網際網路的飛速發展寫,大量的資料可以通過網頁直接採集,“網路爬蟲”應運而生,本篇將會講解簡單的網路爬蟲編寫方法。   開發環境 每個人的開發環境各異,下面上是我的開發

為什麼我堅持Go語言Web應用開發框架?

點選上方“CSDN”,選擇“置頂公眾號”關鍵時刻,第一時間送達!【CSDN編者按】很多情況下,企

go 語言實現一個簡單的 web 伺服器

學習Go語言的一些感受,不一定準確。假如發生戰爭,JAVA一般都是充當航母戰鬥群的角色。一旦出動,就是護衛艦、巡洋艦、航母艦載機、預警機、電子戰飛機、潛艇等等浩浩蕩蕩,殺將過去。(JVM,數十個JAR包,Tomcat中介軟體,SSH框架,各種配置檔案...天生就是重量級的,

一個簡單登入介面

先寫好登入介面的佈局,記住要寫一個Checkbox。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an

[計網] python語言開發一個簡單的web伺服器和客戶端

伺服器:      當客戶聯絡時建立一個連線套接字 從這個連線接收HTTP請求(*)      解釋該請求所請求的特定檔案      從伺服器的檔案系統獲取該檔案      併發送檔案內容     

GO語言實現一個簡單的網頁爬蟲

具體思路是利用go語言提供的遠端包github.com/PuerkitoBio/goquery,但是有時候連結會出錯,導致程式編譯不通過,我們可以直接將這個包下載到本地,然後將import匯入地址修改為本地的goquery地址即可首先建立檔案,儲存從網頁上扒下來的內容接下來使

C語言編寫一個簡單的詞法分析程序

c++語言 bool mage com span 如果 txt文件 需要 關閉 問題描述: 用C或C++語言編寫一個簡單的詞法分析程序,掃描C語言小子集的源程序,根據給定的詞法規則,識別單詞,填寫相應的表。如果產生詞法錯誤,則顯示錯誤信息、位置,並試圖從錯誤中恢復。簡單的

Go 語言實現一個 telegram 的 bot

嘗試 用 Go 語言做了一個 telegram 的 bot . 用來簡單實現對話(復讀)。   獲得 tele

Unity連線MySql一個簡單登入系統

有過開發經驗的同學都應該知道,資料庫在與程式連線時,一般都需要相應的驅動包,這裡我們以MySql與Unity3D連線為例 一、準備所需要的全部程式集 1、首先從D:\Unity\Editor\Data\Mono\lib\mono\2.0(Unity安裝目錄)中找到以下5個

閒來無事在微信推文中看到一個炫酷的具有動態特效的中國地圖R語言於是嘗試了一下

[toc] # 最終的效果圖如下: ![](https://img2020.cnblogs.com/blog/1692343/202103/1692343-20210330160758328-1708125696.png) ![](https://img2020.cnblogs.com/blog/16923

Go語言建立一個簡單的服務端點

一個 nds Coding port struct pac quest com handler handlers/handlers.go package handlers import ( "encoding/json" "net/http" )