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))
}
此时页面展示
使用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>
程序结果
服务端正则表达式
正则
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>