Golang语言学习从入门到实战----HTTP web开发编程

在这里插入图片描述

Hello,我是普通Gopher,00后男孩,极致的共享主义者,想要成为一个终身学习者。专注于做最通俗易懂的计算机基础知识类公众号。每天推送Golang技术干货,内容起于K8S而不止于K8S,涉及Docker、微服务、DevOps、数据库、虚拟化等云计算内容及SRE经验总结
=======================
初次见面,我为你准备了100G学习大礼包:
1、《百余本最新计算机电子图书》
2、《30G Golang学习视频》
3、《20G Java学习视频》
4、《90G Liunx高级学习视频》
5、《10G 算法(含蓝桥杯真题)学习视频》
6、《英语四级,周杰伦歌曲免费送!》
路过麻烦动动小手,点个关注,持续更新技术文章与资料!

1. HTTP编程

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", Hello)
	http.HandleFunc("/usr/login", login)
	http.HandleFunc("/usr/history", history)
	err := http.ListenAndServe("0.0.0.0:8880", nil)
	if err != nil {
		fmt.Println("http listen failed")
	}
}

func Hello(w http.ResponseWriter, r *http.Request) {
	fmt.Println("handle hello")
	_, _ = fmt.Fprintf(w, "hello !")
}

func login(w http.ResponseWriter, r *http.Request) {
	fmt.Println("handle login")
	_, _ = fmt.Fprintf(w, "hello login !")
}

func history(w http.ResponseWriter, r *http.Request) {
	fmt.Println("handle history")
	_, _ = fmt.Fprintf(w, "hello history!")
}

打开浏览器访问本地的8880端口(因为我这里设置的是8880端口)
在
在这里插入图片描述
在这里插入图片描述

2. HTTP Client

package demo2

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

func main() {
	res, err := http.Get("https://www.baidu.com")
	if err != nil {
		fmt.Println("get err", err)
	}

	data, err := ioutil.ReadAll(res.Body)
	if err != nil {
		fmt.Println("data err", err)
		return
	}
	fmt.Println(string(data))

}

GET请求访问百度, 返回的网页信息
在这里插入图片描述

3. 表单处理

package main

import (
	"io"
	"net/http"
)

// 定义Html页面的显示表单
const form = ` 
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>产品添加-产品管理系统</title>
</head>
<body>
<h3>产品管理表单</h3>
<form action="#" method="post">
图书名称:<input type='text' name='title' />
<hr />
销售价格:<input type="text" name='price' />
<hr />
市场价格:<input type="text" name='market_price' />
<hr />
<input type="submit" name="submit" value="添加" />
<input type="reset" name="reset" value="重置" />
</form>
</body>
</html>
`

func formServer(writer http.ResponseWriter, request *http.Request) {
	writer.Header().Set("Content-Type", "text/html")
	switch request.Method {
	case "GET": // 直接访问时为GET请求
		_, _ = io.WriteString(writer, form)
	case "POST": // 提交表单为POST请求
		_ = request.ParseForm()
		_, _ = io.WriteString(writer, "title = ")
		_, _ = io.WriteString(writer, request.Form["title"][0]+"\n")
		_, _ = io.WriteString(writer, "price = ")
		_, _ = io.WriteString(writer, request.Form["price"][0]+"\n")
		_, _ = io.WriteString(writer, "market_price = ")
		_, _ = io.WriteString(writer, request.Form["market_price"][0]+"\n")
	}
}

func simpleServer(writer http.ResponseWriter, request *http.Request) {
	_, _ = io.WriteString(writer, "<h1>Hello ! This is test1")
}
func main() {
	http.HandleFunc("/test1", simpleServer) // localhost:8880/test1 访问simpleServer定义的页面
	http.HandleFunc("/test2", formServer)   // localhost:8880/test2 访问formServer定义的页面
	if err := http.ListenAndServe("0.0.0.0:8880", nil); err != nil {

	}
}

http://localhost:8880/test1 可以访问到设置的test1页面
在这里插入图片描述
http://localhost:8880/test2 可以访问到设置的test2页面
在这里插入图片描述
提交表单会返回输入的值
在这里插入图片描述

4. 捕获Panic错误处理

package main

import (
	"io"
	"log"
	"net/http"
)

// 定义Html页面的显示表单
const form = ` 
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>产品添加-产品管理系统</title>
</head>
<body>
<h3>产品管理表单</h3>
<form action="#" method="post">
图书名称:<input type='text' name='title' />
<hr />
销售价格:<input type="text" name='price' />
<hr />
市场价格:<input type="text" name='market_price' />
<hr />
<input type="submit" name="submit" value="添加" />
<input type="reset" name="reset" value="重置" />
</form>
</body>
</html>
`

func formServer(writer http.ResponseWriter, request *http.Request) {
	writer.Header().Set("Content-Type", "text/html")
	switch request.Method {
	case "GET": // 直接访问时为GET请求
		_, _ = io.WriteString(writer, form)
	case "POST": // 提交表单为POST请求
		_ = request.ParseForm()
		_, _ = io.WriteString(writer, "title = ")
		_, _ = io.WriteString(writer, request.Form["title"][0]+"\n")
		_, _ = io.WriteString(writer, "price = ")
		_, _ = io.WriteString(writer, request.Form["price"][0]+"\n")
		_, _ = io.WriteString(writer, "market_price = ")
		_, _ = io.WriteString(writer, request.Form["market_price"][0]+"\n")
	}
}

func simpleServer(writer http.ResponseWriter, request *http.Request) {
	_, _ = io.WriteString(writer, "<h1>Hello ! This is test1")
	panic("This is a panic test !")
}
func logPanics(handle http.HandlerFunc) http.HandlerFunc {
	return func(writer http.ResponseWriter, request *http.Request) {
		defer func() {
			if x := recover(); x!=nil{
				log.Printf("[%v] caught panic: %v",request.RemoteAddr, x)
			}
		}()
		handle(writer, request)
	}
}
func main() {
	http.HandleFunc("/test1", logPanics(simpleServer)) // localhost:8880/test1 访问simpleServer定义的页面
	http.HandleFunc("/test2", logPanics(formServer))   // localhost:8880/test2 访问formServer定义的页面
	if err := http.ListenAndServe("0.0.0.0:8880", nil); err != nil {

	}
}

Demo添加了panic处理函数logPanics, 可以在终端查看捕获的Panic信息
在这里插入图片描述

5. 调用模板网页

package main

import (
	"fmt"
	"html/template"
	"os"
)

type Person struct {
	Name string
	Age  string
}

func main() {
	t, err := template.ParseFiles("E:/Go/Golang_Studycode/src/demoCode/domo5/index.html") // index.html路径
	if err != nil {
		fmt.Println(" Parse file err:", err)
		return
	}
	p := Person{Name:"Jack", Age:"20"}
	if err := t.Execute(os.Stdout, p); err != nil{
		fmt.Println("There was an erros:",err.Error())
	}
}

index.php

<html>
<head>
    <title>This is a test</title>
</head>
<body>
    <p> this is a test!</p>
    <p> Hello {{.Name}} , you age is {{.Age}}</p>

</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值