01—封装err函数
package main
import (
"net"
"fmt"
"os"
)
func errFunc(err error, info string) {
if err != nil {
fmt.Println(info, err)
//return // 返回当前函数调用
//runtime.Goexit() // 结束当前go程
os.Exit(1) // 将当前进程结束。
}
}
func main() {
listener, err := net.Listen("tcp", "127.0.0.1:8000")
errFunc(err, "net.Listen err:")
defer listener.Close()
conn, err := listener.Accept()
errFunc(err, "Accpet err:")
defer conn.Close()
buf := make([]byte, 4096)
n, err := conn.Read(buf)
if n == 0 {
return
}
errFunc(err, "conn.Read")
fmt.Printf("|%s|\n", string(buf[:n]))
}
02-模拟浏览器访问
# 将下面代码替换成以下代码
resp,err := http.Get(url)
defer resp.Body.Close()
# 替换为
client := &http.Client{}
req, err1 := http.NewRequest("GET", url, nil)
if err1 != nil {
err = err1
return
}
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36")
resp, err2 := client.Do(req)
if err2 != nil {
err = err2
return
}
defer resp.Body.Close()
03-匹配换行
ret1 := regexp.MustCompile(`<li class=" col-4">\r\n.*<a href="(?s:(.*?))"`)
04-读取html文件
func main() {
addr := ":8888"
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
f, _ := os.Open("./template/index.html")
io.Copy(w, f)
})
http.ListenAndServe(addr, nil)
}