Go语言学习笔记(4)

该博客是Go语言学习笔记第四篇,包含文件下载内容,介绍了使用ajax请求返回json数据及程序结果,还涉及服务端正则表达式,包括正则内容和服务器端的正则验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go语言学习笔记(4)

文件下载

package main

import (
	"fmt"
	"html/template"
	"io/ioutil"
	"net/http"
)

func download(w http.ResponseWriter, r *http.Request){
	filename:=r.FormValue("filename")
	f,err:=ioutil.ReadFile("D:/FirefoxDownload/"+filename)
	if (err!=nil){
		fmt.Fprintln(w,"file downloads failure!",err)
		return
	}
	h:=w.Header()
	h.Set("Content-type","application/octet-stream")
	h.Set("Content-Disposition","attachment;filename="+filename)
	w.Write(f)
}


func main(){
	server:=http.Server{Addr:":8090"}
	http.HandleFunc("/download",download)
	server.ListenAndServe()
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>file download</title>
</head>
<body>
<a href="download?filename=1.jpg">download</a>
</body>
</html>




ajax返回json数据

type User struct{
	Name string
	Age int
}
func test(){
	u:=User{"Tom",18}
	b,_:=json.Marshal(u)
	fmt.Println(string(b))
	u1:=new (User)
	json.Unmarshal(b,u1)
	fmt.Println(u1)
}

输出结果:

{"Name":"Tom","Age":18}
&{Tom 18}

package main

import (
	"encoding/json"
	"fmt"
	"html/template"
	"net/http"
)

type User struct{
	Name string
	Age int
}
func showUser(w http.ResponseWriter, r *http.Request){
	us:=make([]User,0)
	us=append(us,User{Name:"Tom",Age:18})
	us=append(us,User{Name:"Charles",Age:20})
	us=append(us,User{Name:"Paige",Age:3})
	b,err:=json.Marshal(us)
	if err!=nil{
		fmt.Fprintln(w,"json Marshal failure!",err)
		return
	}
	fmt.Fprintln(w,string(b))
}

func main(){
	server:=http.Server{Addr:":8090"}
	http.HandleFunc("/showUser",showUser)
	server.ListenAndServe()
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax</title>
</head>
<body>
<button>load data</button>
<table border="1">
    <tr>
        <td>name</td>
        <td>age</td>
    </tr>
    <tbody id="mytbody">

    </tbody>
</table>
</body>
</html>

此时展示样式

[{"Name":"Tom","Age":18},{"Name":"Charles","Age":20},{"Name":"Paige","Age":3}]

进行调整

func showUser(w http.ResponseWriter, r *http.Request){
	us:=make([]User,0)
	us=append(us,User{Name:"Tom",Age:18})
	us=append(us,User{Name:"Charles",Age:20})
	us=append(us,User{Name:"Paige",Age:3})
	b,err:=json.Marshal(us)
	if err!=nil{
		fmt.Fprintln(w,"json Marshal failure!",err)
		return
	}
	w.Header().Set("Content-Type","application/json;charset=utf-8")
	fmt.Fprintln(w,string(b))
}

此时页面展示
json


使用ajax请求返回json数据
package main

import (
	"encoding/json"
	"fmt"
	"html/template"
	"net/http"
)

func welcome(w http.ResponseWriter, r *http.Request){
	t,_:=template.ParseFiles("view/index.html")
	t.Execute(w,nil)
}

type User struct{
	Name string
	Age int
}
func test(){
	u:=User{"Tom",18}
	b,_:=json.Marshal(u)
	fmt.Println(string(b))
	u1:=new (User)
	json.Unmarshal(b,u1)
	fmt.Println(u1)
}
func showUser(w http.ResponseWriter, r *http.Request){
	us:=make([]User,0)
	us=append(us,User{Name:"Tom",Age:18})
	us=append(us,User{Name:"Charles",Age:20})
	us=append(us,User{Name:"Paige",Age:3})
	b,err:=json.Marshal(us)
	if err!=nil{
		fmt.Fprintln(w,"json Marshal failure!",err)
		return
	}
	w.Header().Set("Content-Type","application/json;charset=utf-8")
	fmt.Fprintln(w,string(b))
}

func main(){
	server:=http.Server{Addr:":8090"}
	//加载静态文件
	http.Handle("/static/",http.StripPrefix("/static/",http.FileServer(http.Dir("static"))))
	http.HandleFunc("/",welcome)
	http.HandleFunc("/showUser",showUser)
	server.ListenAndServe()
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax</title>
    <script type="text/javascript" src="/static/js/jquery-3.4.1.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $("button").click(function(){
                alert("static load success");
                $.post("/showUser",function (data){
                    alert(data);
                    var result="";
                    for (var i=0;i<data.length;i++){
                        result+="<tr>";
                        result+="<td>"+data[i].Name+"</td>";
                        result+="<td>"+data[i].Age+"</td>";
                        result+="</tr>";
                    }
                    $("#mytbody").html(result);
                })
            })
        })
    </script>
</head>
<body>
<button>load data</button>
<table border="1">
    <tr>
        <td>name</td>
        <td>age</td>
    </tr>
    <tbody id="mytbody">

    </tbody>
</table>
</body>
</html>
程序结果

静态数据加载成功
data加载成功
ajax加载数据成功





服务端正则表达式

正则
	r, _ := regexp.Compile(`C:\\\\`)
	if r.MatchString("Working on drive C:\\") == true {
		fmt.Printf("Matches.") // <---
	} else {
		fmt.Printf("No match.")
	}
	r, _ = regexp.Compile(`\$`)
	if len(r.FindString("He paid $150 for that software.")) != 0 {
		fmt.Printf("Found $-symbol.") // <-
	} else {
		fmt.Printf("No $$$.")
	}
	s := "Eenie meenie miny moe."
	r, _ = regexp.Compile(`\w+`)
	res := r.FindAllString(s, -1)
	// 打印 [Eenie meenie miny moe]
	fmt.Printf("%v", res)
func main(){
	r,_:=regexp.MatchString(`\D`,"123e456")//包含非数字
	fmt.Println(r)//true
}
func main(){
	r,_:=regexp.MatchString(`^\D`,"123e456")//从开始串第一个字符必须是非数字
	fmt.Println(r)//false
}
func main(){
	r,_:=regexp.MatchString(`^\D\d$`,"e4")//从开始串第一个字符必须是非数字,结束必须是数字
	fmt.Println(r)//true
}
func main(){
	r,_:=regexp.MatchString(`^\D+\d+$`,"e#e44")//前面非数字 后面数字
	fmt.Println(r)//true
}
func main(){
	r:=regexp.MustCompile(`\d[a-z0-9]`)
	fmt.Println(r.MatchString("hhh1ggg"))// 1ggg true
}
服务器端正则验证
package main

import (
	"fmt"
	"html/template"
	"net/http"
	"regexp"
)

func welcome(w http.ResponseWriter, r *http.Request){
	t,_:=template.ParseFiles("view/index.html")
	t.Execute(w,nil)
}
func register(w http.ResponseWriter, r *http.Request){
	username:=r.FormValue( "username")
	result,_:=regexp.MatchString(`[0-9a-zA-Z]{6-12}$`,username)
	if result{
		fmt.Fprintln(w,"register success")
	} else{
		fmt.Fprintln(w,"register failure pattern failure")
	}
}

func main(){
	server:=http.Server{Addr:":8090"}
	http.HandleFunc("/",welcome)
	http.HandleFunc("/register",register)
	server.ListenAndServe()
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax</title>
    <script type="text/javascript" src="/static/js/jquery-3.4.1.min.js"></script>

</head>
<body>
<form action="register" method="post">
    用户名<input name="username" type="text"/>用户名数字或字母,长度6-12
    <input type="submit" value="register"/>
</form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值